別のプロセスで実行されているウィンドウに送信されたメッセージを傍受して、それらのいくつかに反応できるようにしようとしています。
注入アプリケーションは、p/invokeを介してこのメソッドを呼び出すx86WPFアプリケーションです。別のx86プロセスでウィンドウにハンドルを渡します。
extern "C" BOOL INJ_API ::InterceptMessages(HWND hWnd)
{
if (!WM_MY_INJECT)
{
WM_MY_INJECT = RegisterWindowMessage(TEXT("WM_MY_INJECT"));
}
// Get the ID of the thread running the window.
DWORD ThreadId = GetWindowThreadProcessId(hWnd, NULL);
// Set the hook
hhk = SetWindowsHookEx(WH_GETMESSAGE, HookProc, hinstDLL, ThreadId);
// hhk is non-zero, so the hook is set up
// This will block until the WM_MY_INJECT message is processed, the hook is unhooked, and we are done injecting the application.
LRESULT result = SendMessage(hWnd, WM_MY_INJECT, NULL, NULL);
return TRUE;
}
結果が正しい値であるため、メッセージが送信されていることがわかります。ただし、DLLが他のプロセスによってロードされることはなく、フックがメッセージをインターセプトせずにメッセージが呼び出されます。