我需要处理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_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
}
}