Tastatur-Hook, um mit Delphi nach F12 zu suchen

8

Diese Frage wurde möglicherweise bereits beantwortet, aber ich konnte die richtige Antwort nicht finden. Ich versuche, einen Debug-Schalter umzuschalten, wenn die F12-Taste in einem Formular gedrückt wird. Ich kann das onkeydown-Ereignis nicht verwenden, da ich für jedes Feld eine separate Funktion zusammen mit dem Formular einrichten müsste. Also habe ich recherchiert und gefunden, dass die SetWindowsHookEx-Funktion einen Tastatur-Hook setzt. Das funktioniert gut, außer ich bekomme zwei Anzeigen, dass die F12-Taste bei jedem Drücken gedrückt wurde:

%Vor%

Ich sehe, dass Keystroke eine mögliche Methode ist, nach Keydown zu suchen (WM_KEYDOWN $ 0100). Meine Frage ist, wie ich Keystroke für WM_KEYDOWN testen?

Hier ist meine Rückruffunktion:

%Vor%     
Rich R 21.05.2014, 21:28
quelle

1 Antwort

12

Sie müssen dem einzelnen OnKeyDown -Ereignis eines einzelnen Steuerelements keinen anderen Handler zuweisen. Sie können alle zuweisen, um denselben Handler zu verwenden. Wenn Sie die KeyPreview -Eigenschaft des Formulars aktivieren, müssen Sie keinem der Steuerelemente einen Handler zuweisen. Sie können das OnKeyDown -Ereignis des Formulars selbst verwenden. Wenn Sie den Schlüssel drücken müssen, wenn mehrere Formulare geöffnet sind, können Sie stattdessen das Ereignis TApplication.OnMessage oder TApplicationEvents.OnMessage verwenden. In beiden Fällen müssen Sie keinen Tastatur-Hook über SetWindowsHooKEx() verwenden.

Der Grund dafür, dass Ihr Hook nicht funktioniert, ist, dass WM_KEYDOWN eine Fenstermeldung und kein Keystroke-Flag ist. Lesen Sie die Dokumentation . Der Tastenanschlag der beiden angezeigten Meldungen unterscheidet sich nur in den Bits 30 (vorheriger Tastenstatus) und 31 (Übergangszustand).

    
Remy Lebeau 21.05.2014, 21:37
quelle

Tags und Links