2016-10-10 3 views
0

Hallo Ich brauche Hilfe mit diesem Haken Ich lerne über Haken und ich mache ein einfaches Beispiel, um mehr über setwindowshookex von Microsoft zu lernen. Das erste, was ich verschiedene Steuertasten wie Strg enthalten versuchen, geben, etc ich diesen Code versucht habe:Haken mit setwindowhookex

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

           qDebug() << "prueba"; 

           break; 

          default: 
           break; 
         } 
     } 

Offensichtlich funktioniert nicht. So kann ich vergleichen, aber ich ziehe es vor, einen Typ einzuschließen, um Kontrollschlüssel zu überprüfen. Gleichzeitig versuche ich, etwas zu trennen, wenn ich verschiedene Anwendungen wie Notizblock zum Lernen verwende.

+0

Die Kombination von 'if (wParam == ...)' und 'switch (wParam)' ist nicht sinnvoll. Sie kennen bereits den Wert von 'wParam' an diesem Punkt, der 'Fall' mit einem anderen Wert kann niemals erreicht werden. Vielleicht wollten Sie zwei verschiedene Variablen überprüfen? Was für eine Funktion ist das überhaupt? Ist dies Ihr ['KeyboardProc'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984 (v = vs.85) .aspx)? –

Antwort

0

Die normale Methode, nach der Sie in einer Tastatur-Hook-Funktion nach Zusatztasten suchen, ist GetKeyState, z.

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 
     { 
     } 

wobei HiOrder ein const SHORT-Wert ist, bei dem das höherwertige Bit gesetzt ist.