当窗口未聚焦/活动时处理击键

时间:2013-03-10 00:47:16

标签: winapi window focus keystroke accelerator

即使窗口没有聚焦/活动,我也需要在WinAPI中处理密钥组合(CTRL+SHIFT+UP)。

我该怎么做(如果可能的话,我更喜欢不使用WinApi Hooks的解决方案)?

1 个答案:

答案 0 :(得分:4)

首先,您需要注册具有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_SHIFT。向上箭头键VK_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
    }
}