2013-03-10 48 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

相關問題