从其他 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().

执行此操作