Во-первых, у меня очень ограниченные знания C ++.
Пару лет назад мне удалось сколотить код, который считывает область памяти какого-то программного обеспечения для эмуляции фруктовых автоматов. Он работал на основе заголовка окна фруктового автомата с буквами «DX».
Я использовал следующий код:
if (strstr(lpszTitle, "DX") && !strstr(lpszTitle, "=")) {
cout << "\nFound fruity with name: " << lpszTitle << "\n";
currentWindowName = lpszTitle;
// Found "DX" in the title of the window
// so it must be an MFME window
GetWindowThreadProcessId(hWnd, &pid);
HANDLE phandle = OpenProcess(PROCESS_VM_READ, 0, pid);
if (!phandle)
{
cout << "\nCould not get handle!\n";
soundHopperAlarm(5); // "Error, could not get window process handle"
cin.get();
}
else
{ // rest of code here...
Тогда кто-то сказал мне, что лучший способ получить дескриптор окна - это код:
wchar_t process[] = L"MFME.exe";
DWORD pid= GetPID(process);
HANDLE phandle = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ, false, pid);
Я не менял свой код, потому что (в то время) он соответствовал моей цели. Я просто изменил все "фруктовые машины", которые я эмулировал, чтобы в их заголовке был текст "DX", и все заработало ...
Однако в настоящее время я пытаюсь добавить в систему более 1000 фруктовых автоматов, и было бы НАМНОГО проще, если бы существовал более надежный метод получения дескриптора окна без необходимости изменять каждый заголовок окна.
Я действительно не могу понять новый код, и простое копирование / вставка в мой существующий код вызывает ошибки, связанные с неопределенностью GetPID, поэтому я подумал, может ли кто-нибудь помочь мне с надежным решением для получения дескриптора окна, открытого с помощью " MFME.exe?
Любая помощь / руководство очень ценится.
FindWindow/Ex()
илиGetClassName()
, чтобы найти их. - person Remy Lebeau   schedule 22.09.2019