2015-05-09 51 views
0

目標:我想知道用戶是否按了一些我想知道的熱鍵,例如我想知道他/她在Chrome上按Ctrl + NWINAPI鍵盤檢測其他應用程序熱鍵

我嘗試檢測應用程序熱鍵,如可能Chrome Chrome + N打開新選項卡。

winapi如何檢測到這一點?

我見過一些文章說WM_KEYUP + WM_KEYDOWN,但是wParam有一次可以得到一個WM_KEYUP或WM_KEYDOWN,怎麼實現呢?

int main(int argc, char *argv[]) 
{ 
    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProc, hInstance, 0); 
    hMouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc, hInstance, 0); 
    while (GetMessage(&message,NULL,0,0)) { 
     TranslateMessage(&message); 
     DispatchMessage(&message); 
    } 
    UnhookWindowsHookEx(hHook); 
    UnhookWindowsHookEx(hMouseHook);} 

KeyBoardHookProc(int nCode, WPARAM wParam, LPARAM lParam){ 

    KBDLLHOOKSTRUCT cKey = *((KBDLLHOOKSTRUCT*)lParam); 
    ................. 

    if(wParam == WM_KEYUP) 
    { 
     kp.HandlekeyboardInfo(lpszName, buffer); 
    } 

    return CallNextHookEx(hHook, nCode, wParam, lParam); 
} 

感謝您的幫助!

+0

這使得幾乎沒有意義。你能退後一步告訴我們你的實際目標嗎?我很確信你選擇了錯誤的解決方案。 –

+0

我想知道用戶是否按了一些我想知道的熱鍵,就像我想知道他/她在Chrome上按Ctrl + N – geraldlim

+0

RegisterHotKey與什麼有關?這與此無關。你需要聽取CTRL下降,然後N下降。 –

回答

0

有幾種不同的方法可以做到這一點。最簡單的方法是在您的應用程序中註冊一個熱鍵,並在按下組合鍵時讓Windows通知您。

RegisterHotKey

另一種方法是註冊一個鍵盤鉤子。所有的按鍵都會傳遞給你的應用程序,但你必須確定按下了哪些按鍵。如果你走這條路線,一定要打電話CallNextHookEx()。

SetWindowsHookEx

+0

現在我使用SetWindowsHookEx來完成它,因爲RegisterHotKey會導致原始熱鍵丟失 – geraldlim

相關問題