ここでゲームのメッセージ キューをフックすることについて尋ねたところ、GetWindowThreadProcessId() を使用するように言われました。ここに私が書いて注入しているコードがありますが、まったく機能していないようです。
LRESULT CALLBACK MessageHook ( int code, WPARAM wParam, LPARAM lParam)
{
if (code >= 0)
{
if(((tagMSG*)lParam)->message == WM_KEYDOWN)
MessageBox(NULL, "Called", "Success", MB_OK);
}
return CallNextHookEx (hookHandle, code, wParam, lParam);
}
void OnAttach(HMODULE hDll)
{
while(1)
{
Sleep(100);
if( GetAsyncKeyState( VK_INSERT ) &0x8000 )
break;
}
hookHandle = SetWindowsHookEx (WH_GETMESSAGE, MessageHook, hDll,
GetWindowThreadProcessId(GetForegroundWindow(), nullptr));
if(hookHandle == NULL)
MessageBoxA(NULL, "Error Hooking Message Queue", "Problem", MB_OK);
}
ただし、以前の回答から私が理解していることから、hWndスレッドはメッセージキューを処理するスレッドでなければならないため、間違ったキューをフックしている可能性はないようです。多分間違ってるけど