从其他 window 获取消息
Get message from other window
我尝试从其他 windows 处获取一些消息。我需要按名称查找 window,我使用 FindWindowW()
。我怎样才能激活 window 并从中获取消息?
当我在 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;
只有创建 window 的线程才能直接接收和发送 window 的消息。 GetMessage()
从调用线程的消息队列中检索消息,因此它只能与调用线程拥有的 windows 一起使用。
由于您正在尝试捕获不属于您的 window 的消息,因此您必须使用 SetWindowsHookEx()
or SetWinEventHook()
to install a hook callback into that window's owning thread, and then that callback can intercept the desired messages/events for that window. You can use GetWindowThreadProcessId()
来获取拥有 [=24= 的进程和线程的 ID ].
如果您使用 SetWindowsHookEx()
并试图在另一个进程中挂钩 window,则您的回调必须驻留在 DLL 中,以便可以将其注入该进程。您不需要使用 SetWinEventHook()
.
执行此操作
我尝试从其他 windows 处获取一些消息。我需要按名称查找 window,我使用 FindWindowW()
。我怎样才能激活 window 并从中获取消息?
当我在 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;
只有创建 window 的线程才能直接接收和发送 window 的消息。 GetMessage()
从调用线程的消息队列中检索消息,因此它只能与调用线程拥有的 windows 一起使用。
由于您正在尝试捕获不属于您的 window 的消息,因此您必须使用 SetWindowsHookEx()
or SetWinEventHook()
to install a hook callback into that window's owning thread, and then that callback can intercept the desired messages/events for that window. You can use GetWindowThreadProcessId()
来获取拥有 [=24= 的进程和线程的 ID ].
如果您使用 SetWindowsHookEx()
并试图在另一个进程中挂钩 window,则您的回调必须驻留在 DLL 中,以便可以将其注入该进程。您不需要使用 SetWinEventHook()
.