Home » Tipps & Tricks » System » Tastatur und Maus » Status der Strg-/Alt-/Shift-Tasten erfragen

Status der Strg-/Alt-/Shift-Tasten erfragen

Mit folgendem Code kann geprüft werden, ob eine der Strg-/Alt-/Shift-Tasten gedrückt wird:

function KeyPressed(Key: Integer): Boolean
begin
  Result:=GetKeyState(Key) < 0;
end;

Als Parameter erwartet die Funktion die VirtualKeys der Tasten:

  • VK_SHIFT: Shift-Tasten
  • VK_CONTROL: STRG-Tasten
  • VK_MENU: ALT-Tasten

Falls man zwischen linker und rechter Strg-/Alt-/Shift-Taste unterscheiden will, muss man folgende Konstanten verwenden. Beachten Sie, dass die Unterscheidung unter W9X noch nicht berücksichtigt wird:

  • VK_LSHIFT: linke Shift-Taste
  • VK_RSHIFT: rechte Shift-Taste
  • VK_LCONTROL: linke Strg-Taste
  • VK_RCONTROL: rechte Strg-Taste
  • VK_LMENU: linke Alt-Taste
  • VK_RMENU: rechte Alt-Taste

Weitere Konstanten für Sondertasten (Windows-Taste, Microsoft-Tastatur-eigene Tasten) finden sich in der Hilfe unter dem Stichwort „Virtual-Key Codes“.

Die oben stehende Funktion basiert auf dem Aufruf von GetKeyState. Je nach Status der Taste werden die Bits des Ergebnisstyps gesetzt. GetKeyState setzt das unterste Bit, wenn die Taste gedrückt wurde. Dies würde einem Vergleich mit 1 entsprechen. Wird die Taste gedrückt gehalten („toggled“), wird das oberste Bit gesetzt. Da der Rückgabewert unter Delphi ein vorzeichenbehafteter Integer-Typ ist, genügt in der Funktion ein Vergleich auf kleiner 0 (siehe oben). Wurde die Taste nicht gedrückt, ist der Rückgabewert 0.

Statt der GetKeyState-Funktion kann auch die GetAsyncKeyState-Funktion verwendet werden. Im Gegensatz zu GetKeyState bereinigt sie den Tastaturpuffer. Folgender Funktion muss der entsprechende VirtualKey übergeben werden. Die Funktion gibt dann True zurück, falls die Taste in diesem Moment gedrückt wird:

function KeyPressed(Key: Integer): Boolean;
begin
  KeyPressed := (GetAsyncKeyState(Key) and $8000  0);
end;

Weitere Informationen finden Sie in der PSDK unter dem Stichwort „GetKeyState“ und „GetAsyncKeyState“.