Comment faire un hook clavier mondiale à travers des processus

Je suis en train de créer un utilitaire de frappe application pour que je puisse faire des choses comme tuer une sélection de processus ou de lancer quelque chose. Je suis penser que je devrais tenir cmd dans n'importe quelle application, puis tapez un numéro à 4 chiffres sur la touche de commande afin que je puisse lancer ou de tuer quoi que ce soit rapidement pendant la programmation, le débogage de regarder une vidéo, etc.

J'ai compris comment obtenir le clavier de rappel, mais pour quelque raison que ce soit, une fois que je clique sur une autre application, ma frappe util reçoit pas plus de touches. Même si je clique sur le dos de ma fenêtre de la console, ou msvc, je ne reçoit aucun signal. C'est moins que son mondial, alors comment puis-je régler le crochet pour être global?

Mon code est

int main()
{
    hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle(0), 0);
    MSG msg;
    while(GetMessage(&msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    UnhookWindowsHookEx(hook);
}
Vous êtes probablement mieux d'utiliser régulièrement une touche de raccourci à l'aide de RegisterHotkey. WH_KEYBOARD crochets nécessitent une DLL, et le code 32 bits ne peut pas accrocher en 64, et vice-versa. WH_KEYBOARD_LL crochets n'ont pas ce problème, mais ont des problèmes de performances à la place.

OriginalL'auteur | 2009-01-18