Einzelnen Beitrag anzeigen

TPok

Registriert seit: 19. Jul 2004
Ort: Eisenach
25 Beiträge
 
Delphi 2005 Professional
 
#1

Kontrollieren der CAPS-Lock Taste

  Alt 24. Aug 2004, 12:54
Hallo,

ich schreibe gerade ein Programm, welches seine Eingaben per Barcode-Scanner erhält. Da die Benutzer des Rechners aber (teilweise unbeabsichtigt) die CAPS-Lock Taste bedienen, habe ich mir folgendes Verhalten ausgedacht:
1. Wenn die Applikation aktiviert wird, merkt sie sich den Status der CAPS-Taste und deaktiviert sie. Wenn die Applikation deaktiviert wird, stellt sie den Status der Taste wieder her.
2. Während die Applikation aktiviert ist, wird die CAPS-Taste abgefangen und beleibt wirkungslos.

Verhalten 1 habe ich mit folgendem Code realisiert:
Delphi-Quellcode:
...
  private
    { Private-Deklarationen }
    CapsState: Boolean;

    procedure AppActivate(Sender: TObject);
    procedure AppDeActivate(Sender: TObject);
...

procedure SetCapsLock(Active: Boolean);
var Scan: UINT;
    State: SHORT;
begin
  Scan := MapVirtualKey(VK_CAPITAL, 0);
  State := GetKeyState(VK_CAPITAL);
  if Active xor (State and $0001 = $0001) then begin
    keybd_event(VK_CAPITAL, Scan, 0, 0);
    keybd_event(VK_CAPITAL, Scan, KEYEVENTF_KEYUP, 0);
  end;
end;

procedure TForm1.AppActivate(Sender: TObject);
begin
  CapsState := (GetKeyState(VK_CAPITAL) and $0001 = $0001);
  SetCapsLock(false);
end;

procedure TForm1.AppDeActivate(Sender: TObject);
begin
  SetCapsLock(CapsState);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnActivate := AppActivate;
  Application.OnDeActivate := AppDeActivate;
end;
Mein Problem ist Verhalten 2. Ich habe schon etwas mit dem KeyPreview des Formulars experimentiert. Aber das brachte mich nicht zum Erfolg.
Für Vorschläge wäre ich dankbar.

Gruß,
Stephan
Stephan Fietzek
  Mit Zitat antworten Zitat