处理按键时,窗口没有聚焦/活动



我需要处理WinAPI中的键组合(CTRL+SHIFT+UP),即使窗口没有集中/活动。

我怎么能做到这一点(如果可能的话,我宁愿不使用WinApi钩子的解决方案)?

首先,您需要使用RegisterHotKey函数注册一个"系统范围"热键。即使您的应用程序被最小化,不集中或隐藏,它也可以工作。

RegisterHotKey(hWnd, KEY_ID, MOD_CONTROL | MOD_SHIFT, VK_UP);
// check for errors, the function will fail if the hot key is already registered

hWnd是接收WM_HOTKEY消息的窗口句柄。KEY_ID为热键标识符。Ctrl+Shift均为MOD_CONTROL | MOD_SHIFTVK_UP为向上方向键。

第二,你需要在你的窗口过程中处理WM_HOTKEY消息。

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
        ...
        WM_HOTKEY:
        // handle the hot key here
        ...
    }
}

如果你的应用程序没有窗口并且hWnd为NULL,那么你需要在你的消息循环中处理WM_HOTKEY。

MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0) != 0)
{
    if (msg.message == WM_HOTKEY) {
        // handle the hot key here
    }
} 

最新更新