2016-10-10 34 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值。