2010-01-09 3 views
2

J'essaie d'accrocher le clavier dans mon programme, mais il y a quelque chose que je ne peux pas accomplir. La méthode ci-dessous est la partie la plus importante dans ma classe où je gère certaines combinaisons de touches. Tous fonctionnent, mais je veux aussi accrocher Ctrl-Alt-Tab. J'ai passé des heures à essayer de comprendre quoi faire, mais je suis venu les mains vides. Comment puis-je accrocher cette combinaison?Comment puis-je accrocher Ctrl-Alt-Tab?

Plus d'informations peuvent être trouvées ici:
http://msdn.microsoft.com/en-us/library/ms644967(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms927178.aspx

private static IntPtr KeyboardHookHandler(int nCode, IntPtr wParam, KBDLLHookStruct lParam) 
{ 
    if (nCode == 0) 
    {    

    if (((lParam.flags == 32) && (lParam.vkCode == 0x09)) ||  // Alt+Tab 
     ((lParam.flags == 32) && (lParam.vkCode == 0x1B)) ||  // Alt+Esc 
     ((lParam.flags == 0) && (lParam.vkCode == 0x1B)) ||  // Ctrl+Esc 
     ((lParam.flags == 1) && (lParam.vkCode == 0x5B)) ||  // Left Windows Key 
     ((lParam.flags == 1) && (lParam.vkCode == 0x5C)) ||  // Right Windows Key 
     ((lParam.flags == 32) && (lParam.vkCode == 0x73)) ||  // Alt+F4    
     ((lParam.flags == 32) && (lParam.vkCode == 0x20)))  // Alt+Space 

    { 
     return new IntPtr(1); 
    } 
    } 

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

Répondre

2

Mondes, vous emprisonnent les clés correctement, mais vous devez effectuer des opérations au niveau du bit sur vos lParam.flags pour déterminer si plus d'une touche de modification a été pressé.

C'est du haut de ma tête, mais je pense que le code qui ressemble à ceci:

(lParam.flags == 32) 

devrait ressembler à:

((lParam.flags & 32 == 32) && (lParam.flags & 16 == 16)) 

32 et 16 sont arbitraires dans cet exemple. Vous devez déterminer quelles sont les valeurs ALT et CTRL. Ils seront 1, 2, 4 ... 16, 32 etc. de sorte qu'ils puissent être associés ensemble en une seule valeur.

+0

LCTRL a l'indicateur 0 lorsqu'il est enfoncé et 128 lorsqu'il est relâché. RCTRL a un drapeau 1 lorsqu'il est pressé et 129 lorsqu'il est relâché. Le système ne me donne pas la somme de trois drapeaux correspondant aux clés. Je peux seulement piéger deux clés au maximum. – user246392

0

Il pourrait être utile de votre temps pour vérifier cet article par Paul DiLascia qui montre comment piéger les touches Ctrl + Alt + Suppr combinaison here. Il existe une version disponible pour le framework .NET trouvé sur CodeProject here et here.

Espérons que cela aide, Cordialement, Tom.

Questions connexes