Tastenklau

25/05/2013 - 17:25 von R.Kantas | Report spam
Ich rufe über einen globalen Hotkey eine interne Programmfunktion auf und
möchte anschließend auch die nachfolgende Tasten auswerten, um diverse
Optionen auszuwàhlen, so soll z.B. shift M1 Befehl 1 und shift M2 Befehl 2
ausführen.

Nun können Hotkeys jedoch nur einzelne Tasten, aber nicht ganze Tastenfolgen
haben. Ich möchte daher dem eigentlich im Vordergrund befindlichen Programm
die Tastatur zeitweise abnehmen (ohne mein Programm in den Vordergrund zu
bekommen), weiß aber nicht, wie das gehen könnte.

Alternativ könnte ich auch bereits mit shift M eine neue Form frmINPUT
anzeigen, auf dieser Form KeyPreview=TRUE setzen und dort alle weiteren
Tastendrücke auswerten.

Und da wiederum klemmt es bei mir, es wird mit frmINPUT.show nàmlich leider
nicht nur die frmINPUT angezeigt, sondern die ganze (minimiert laufende)
Anwendung kommt in den Vordergrund. Ich möchte aber keine oder höchstens die
eine Form frmINPUT sehen.

Zeige ich die frmINPUT aber modal an, dann stürzt meine Anwendung ab (ohne
Fehlermeldung) bzw. in der IDE hàngt sie sich auf.

Wie komme ich also am besten an die Folgetasten?

Gruß Rokas
 

Lesen sie die antworten

#1 Schmidt
25/05/2013 - 17:43 | Warnen spam
Am 25.05.2013 17:25, schrieb R.Kantas:
Ich rufe über einen globalen Hotkey eine interne Programmfunktion auf
und möchte anschließend auch die nachfolgende Tasten auswerten, um
diverse Optionen auszuwàhlen, so soll z.B. shift M1 Befehl 1 und shift
M2 Befehl 2 ausführen.

Nun können Hotkeys jedoch nur einzelne Tasten, aber nicht ganze
Tastenfolgen haben.



Aktiviere einfach einen (schnell laufenden, 16msec) Polling-Timer,
sobald Dein "Start-Sequenz"-HotKey erkannt wird - und checke
periodisch per GetKeyboardState oder GetAsyncKeyState, welche
Tasten danach noch so "einlaufen". Das Polling könntest Du nach
(was weiss ich) 5 Sekunden (also ca. 300 Runden zu je 16msec)
dann einfach wieder einstellen und den Timer deaktivieren.

Das ist IMO die am wenigsten fehleranfàllige Lösung, da ganz
ohne Hooks oder SubClassing machbar.

Falls der RC5 zum Einsatz kommt, dann wàre dieser Ansatz gekapselt
in cKeyWatcher, welche dann die einlaufenden VirutalKey-States noch
in zwei Events zerlegt (KeyDown und KeyUp).

Olaf

Ähnliche fragen