Changed window detection code.

GetModuleHandle(NULL) get the exe handle. Sometimes the window couldn't be found because the window wasn't created in the .exe but in a dll. Thats why I list all dll HANDLES and try to find the main window handle.
This commit is contained in:
Nemirtingas 2019-08-21 21:50:59 +02:00
parent 0fa2d82c67
commit 4db2b6528c

View File

@ -7,19 +7,30 @@ extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam
#include "../dll/dll.h" #include "../dll/dll.h"
#include <psapi.h>
HWND GetGameWindow() HWND GetGameWindow()
{ {
HWND hWnd = FindWindow(NULL, NULL); HWND hWnd = FindWindow(nullptr, nullptr);
HMODULE hModules[512];
DWORD needed;
if (EnumProcessModules(GetCurrentProcess(), hModules, 512, &needed) != 0)
{
int numMods = needed/sizeof(HMODULE);
while (hWnd) while (hWnd)
{ {
if (!GetParent(hWnd)) HMODULE wndInst = (HMODULE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
if (wndInst != nullptr)
{ {
if (GetModuleHandle(NULL) == (HMODULE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE)) for (int i = 0; i < numMods; ++i)
break; {
if (!GetParent(hWnd) && hModules[i] == wndInst)
return hWnd;
}
} }
hWnd = GetWindow(hWnd, GW_HWNDNEXT); hWnd = GetWindow(hWnd, GW_HWNDNEXT);
} }
if (!hWnd) }
PRINT_DEBUG("Failed to get game window HWND\n"); PRINT_DEBUG("Failed to get game window HWND\n");
return hWnd; return hWnd;
} }