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
parent
0fa2d82c67
commit
4db2b6528c
|
@ -7,20 +7,31 @@ 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);
|
||||
while (hWnd)
|
||||
HWND hWnd = FindWindow(nullptr, nullptr);
|
||||
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))
|
||||
break;
|
||||
HMODULE wndInst = (HMODULE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue