c-从其他窗口获取消息



我试图从其他窗口获取一些消息。我需要按名称查找窗口,我使用了FindWindowW()。如何获取活动窗口并从中获取消息?当我在GetMessage((中添加hwnd时,它不起作用。

//WndProc
case WM_KEYDOWN:
OutputDebugStringW(L"Key down");
break;
//main.c
//WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
hwnd = FindWindowW(NULL, L"Sublime Text");
while (GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;

只有创建窗口的线程才能直接接收和调度该窗口的消息。GetMessage()从调用线程的消息队列中检索消息,因此它只能与调用线程拥有的窗口一起使用。

由于您试图捕获不属于您的窗口的消息,因此必须使用SetWindowsHookEx()SetWinEventHook()在该窗口的所属线程中安装挂钩回调,然后该回调可以截获该窗口所需的消息/事件。您可以使用GetWindowThreadProcessId()来获取拥有该窗口的进程和线程的ID。

如果您使用SetWindowsHookEx()并试图挂接另一个进程中的窗口,则回调必须驻留在DLL中,以便将其注入该进程。您不需要对SetWinEventHook()执行此操作。

最新更新