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