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.
merge-requests/28/head
Nemirtingas 2019-08-21 21:50:59 +02:00
parent 0fa2d82c67
commit 4db2b6528c
1 changed files with 19 additions and 8 deletions

View File

@ -7,20 +7,31 @@ 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);
while (hWnd) HMODULE hModules[512];
DWORD needed;
if (EnumProcessModules(GetCurrentProcess(), hModules, 512, &needed) != 0)
{ {
if (!GetParent(hWnd)) int numMods = needed/sizeof(HMODULE);
while (hWnd)
{ {
if (GetModuleHandle(NULL) == (HMODULE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE)) HMODULE wndInst = (HMODULE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
break; if (wndInst != nullptr)
{
for (int i = 0; i < numMods; ++i)
{
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;
} }