Ausgewählte Artikel zur Programmierung mit Delphi

Werner Voigt

 für 


Tastenkombinationen 1/2002

Autor: Dipl.-Math. Werner Voigt

veröffentlicht in Toolbox
Copyright 2003 © Werner Voigt und Toolbox
Bitte beachten Sie auch die Hinweise zur kommerziellen Nutzung

Problem:

Tastaturbotschaften beobachten und untersuchen

Lösung:

Um möglichst dicht an die Botschaftsverarbeitung von Windows heran zu kommen, bietet sich der Einstieg über TApplication.OnMessage an. Jede Tastenbetätigung löst beim Drücken (KeyDown) und beim Loslassen (KeyUp) wenigstens eine Botschaft aus. Im beiliegenden Beispielprogramm werden die Botschaften WM_SYSKeyXX und WM_KeyXX mitgelesen. Über den Parameter Handled kann man einzelne Botschaften ggf. unterdrücken (Vorsicht: Pärchenbetrieb, also beide Botschaften zur gleichen Taste beachten, sonst ist Chaos sehr wahrscheinlich). Die Botschaften enthalten mehr als nur den Tastencode. In der Hilfe stehen die Details und auch auf die übrigen zum Thema passenden Botschaften wird verwiesen.

Das Beispielprogramm wertet nur den virtuellen Tastencode aus. Für die Tasten Shift, Strg und Alt werden Checkboxen mißbraucht, um deren gedrückten Zustand zu zeigen. Das funktioniert nur richtig, wenn bei gedrückter Taste (oder Tastenkombination) nicht die Anwendung verlassen wird (z.B. durch Mausklick in ein Fremdfenster).

Für alle anderen Tasten wird im Memofeld Memo1 der Ablauf protokolliert. Allerdings werden dabei (um nicht jede Taste doppelt zu zeigen) nur die "KeyDown"-Botschaften verwendet.

Im StaticText LastKey wird der Tastencode der zuletzt mitgelesenen Botschaft gezeigt.

Mit diesem Programm kann man recht gut experimentieren und Sonderfälle (z.B. F10 im Gegensatz zu den anderen F-Tasten) studieren.

Unter bestimmten Bedingungen reicht diese Lösung nicht aus. Dann löst man das Problem besser mit einem Keyboardhook. Dabei sollte man aber sehr vorsichtig sein, weil man leicht das System ausbremsen und bei fehlerhafter Anwendung zum Absturz führen kann.

zurückzurück
Copyright © 2003 by  EDVoigt  (Werner Voigt).