Beiträge durchsuchen

Tastatur LEDs ansteuern

Der Artikel zeigt, wie die Tastatur-LEDs (NUM, ROLLEN, CAPS-LOCK) angesteuert werden können. Diese Methode hat nicht nur Auswirkungen auf die LEDs, sondern auch auf den Status der jeweiligen Tasten.

uses
  Windows;

procedure SetLED(Key: Byte; MakeOn: Boolean);
var
  KS: TKeyboardState;
begin
  GetKeyboardState(KS);

  // Wenn Status vom gewünschten abweicht
  if ((KS[Key]  0) xor MakeOn) then
  begin
    // Je nach Plattform / Key unterschiedliche Strategien
    if (Win32Platform = VER_PLATFORM_WIN32_NT)
      or (Key  VK_NUMLOCK) then
    begin
      // Tastendruck simulieren
      keybd_event(Key, $45, KEYEVENTF_EXTENDEDKEY, 0);
      keybd_event(Key, $45, KEYEVENTF_EXTENDEDKEY or
        KEYEVENTF_KEYUP, 0);
    end
    else
    begin
      // Gewünschten Status per Setkeyboardstate setzen
      KS[Key]:= Ord(MakeOn);
      SetKeyboardState(KS);
    end;
  end;
end;

Der Aufruf der Methode könnte z.B. folgendermaßen aussehen:

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetLED(VK_CAPITAL, True);
end;

Dem ersten Parameter muss die Byte-Konstante für die entsprechende LED übergeben werden (Virtual Keys). Folgende Werte sind möglich:

Der zweite Parameter legt fest, ob die LED an- oder ausgeschaltet werden soll.Da die LEDs nicht als Lichtorgel ausgelegt wurden, sollten man deren Status nicht zu häufig ändern, da es sonst zu Beschädigungen an der Tastatur kommen kann.
Quellen:

http://support.microsoft.com/kb/q177674/
http://support.microsoft.com/kb/q127190/