CTRL+SHIFT+UP
即使窗口没有聚焦/活动,我也需要在 WinAPI 中处理组合键 ( )。
我该怎么做(如果可能,我更喜欢不使用WinApi Hooks的解决方案)?
CTRL+SHIFT+UP
即使窗口没有聚焦/活动,我也需要在 WinAPI 中处理组合键 ( )。
我该怎么做(如果可能,我更喜欢不使用WinApi Hooks的解决方案)?
首先,您需要使用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
}
}