1

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

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

4

1 回答 1

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是热键的标识符。MOD_CONTROL | MOD_SHIFT对于 Ctrl+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
    }
} 
于 2013-03-10T08:15:30.690 回答