首先,您需要使用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
}
}