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 "../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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue