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