2013-03-10 47 views
1

即使窗口未聚焦/活动,我也需要处理WinAPI中的键组合(CTRL+SHIFT+UP)。当窗口未聚焦/活动时处理键击

我该怎么做(如果可能,我宁愿使用解决方案而不使用WinApi Hooks)?

+1

使用RegisterHotKey()。 – 2013-03-10 01:23:59

+0

如果我想在另一个应用程序中使用Ctrl + Shift + Up怎么办?在Word中选择以前的paragaraph。 – Deanna 2013-03-11 12:15:00

回答

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 
    } 
} 
+0

伟大的答案,甚至更好,你包括需要检查错误。 +1 – 2013-03-10 11:22:31

相关问题