2010-04-25 14 views
7

Ich versuche, meine Anwendung etwas zu tun, wenn STRG + S gedrückt wird. Ich bin mir einfach nicht sicher, wie die W und L Parameter für WM_KEYDOWN funktionieren. MSDN hat etwas über Bitfelder, über die ich nicht sicher bin. Wie kann ich CTRL und S erkennen? DankeWM_KEYDOWN Verwirrung

Was mache ich, wenn ein anderer Steuerbefehl neben hWnd den Fokus hat?

Antwort

16

Nun, this ist die große Liste der virtuellen Schlüsselcodes.

CTRL-S wird als 2 WM_KEYDOWN Nachrichten gesendet zu durch - eine Nachricht, wenn die Strg-Taste (VK_LCONTROL oder VK_RCONTROL), gefolgt von einem 0x53 für den „S“ -Taste gedrückt wird.

Anstatt beide Nachrichten zu verarbeiten, warten Sie auf die Tastenbelegung für das 'S' und rufen Sie dann GetKeyState mit dem magischen Wert VK_CONTROL (anderswo müssen Sie einzeln für die linke UND rechte Steuertaste testen) ab, um zu sehen, ob Das S wurde gedrückt, während STRG gedrückt gehalten wurde.

-

Offensichtlich Tastatur-Nachrichten werden direkt an das Fenster, das den Fokus hat, gesendet. Damit die Beschleunigerkombinationen im Anwendungsbereich der Anwendung funktionieren, müssen Sie die Nachrichten überprüfen, bevor Sie sie an das Fokusfenster senden - d. H. In Ihre Nachrichtenpumpe. Siehe Dokumentation für TranslateAccelerator.

Wenn Sie mit systemweiten Tastendrücken umgehen möchten, verweist die andere Antwort auf den Hotkey api.

+0

Was mache ich, ist eine andere Kontrolle neben hWnd Fokus? – jmasterx

+0

Um Ctrl-X-Kombinationen app weit zu handhaben, würden Sie die Beschleuniger-API verwenden. Systemweit - die Hotkey-API. –

-2

Wenn der WPARAM dem CTRL VKcode entspricht, legen Sie einen Bool im Status Ihres Objekts fest. Dann, wenn S auftaucht, wenn Ctrlbool, hast du STRG-S.

+1

Was passiert, wenn er die Strg-Taste verlässt, bevor er S drückt? Dann müssen Sie mit Keyup-Nachrichten umgehen, um sie zu verfolgen. Chris Antwort ist der geeignete Ansatz. –