2016-10-10 33 views
0

嗨我需要幫助與此鉤我正在學習鉤,我正在做一個簡單的例子,以瞭解更多關於setwindowshookex的微軟。 我想包括像CTRL不同的控制鍵,進入的第一件事,等我曾嘗試這樣的代碼:鉤與setwindowhookex

if(wParam == WM_SYSKEYDOWN){ 
      switch (wParam) 
         { 
          case VK_SHIFT: 

           qDebug() << "prueba"; 

           break; 

          default: 
           break; 
         } 
     } 

顯然沒有工作。所以我可以做比較,但我更喜歡包括一些類型來檢查控制鍵分離。同樣我試圖包括一些東西來分開,當我使用不同的應用程序,如記事本學習。

+0

'if(wParam == ...)'和'switch(wParam)'裏面的組合沒有意義。你已經知道'wParam'的值了,具有其他值的'case'永遠不可能達到。也許你打算檢查兩個不同的變量?這是什麼功能呢?這是你的['KeyboardProc'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984(v = vs.85).aspx)? –

回答

0

在鍵盤鉤子函數中檢查修飾鍵的正常方法是使用GetKeyState,

LRESULT DLL_CALL KeyboardFunc (int nCode, WPARAM wParam, LPARAM lParam) 
{ 
    ... 

    if (nCode < 0) 
     return (CallNextHookEx (hKeyHook, nCode, wParam, lParam)); 

    if (nCode == HC_NOREMOVE) 
     return (CallNextHookEx (hKeyHook, nCode, wParam, lParam)); 

    switch (wParam) 
    { 
     case VK_F12 : 

     // Check for modifier keys: 

     if ((GetKeyState (VK_CONTROL) & iHiOrder) && // ctrl key 
      (GetKeyState (VK_SHIFT) & iHiOrder) && // shift key 
      (GetKeyState (VK_MENU) & iHiOrder)  // Alt key 
     { 
     } 

其中HiOrder是設置了高位比特的常數SHORT值。