Во-первых, у меня очень и очень ограниченные знания 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»?
Любая помощь / руководствоочень ценится.