Einzelnen Beitrag anzeigen

cckLoud

Registriert seit: 19. Nov 2020
Ort: Worms
33 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Wie kann ich Tastaturaktionen über meine Anwendung loggen?

  Alt 21. Sep 2021, 05:18
Ja, das hat funktioniert. Ich habe das ganze in ein Objekt ausgelagert, das ich im Create des Main-Forms anlege (mit glbKeyLog := TKeyLog.Create. Aktiviert wird das ganze mit "glbKeyLog.Active := true;".

Hier die Unit (das mit dem Timer ist, damit die Messagebearbeitung nicht durch die Bearbeitungslogik unterbrochen wird):

Code:
unit KeyLog;

interface
uses Vcl.Forms, Vcl.ExtCtrls, windows, messages, SysUtils;
type
   TKeyLog = class(TObject)
   private
      fActive: boolean;
      Timer: TTimer;
      Key: word;

      procedure OnTimer(Sender: TObject);
      procedure Process;
      procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
   public
      constructor Create;
      property Active: boolean read fActive write fActive;
end;
var glbKeyLog: TKeyLog;
implementation

{ TFrameGebDatenGebaeude }

procedure TKeyLog.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
   if not fActive then
      exit;
// Geht beides, WM_KeyDown und WM_KEYUP
//   if Msg.message = WM_KeyDown then begin
   if Msg.message = WM_KEYUP then begin
      Key:=Msg.wParam;
      Timer.Enabled := true;
   end;
end;

constructor TKeyLog.Create;
begin
   fActive := false;
   Timer := TTimer.Create(Application);
   Timer.Interval := 1;
   Timer.OnTimer := OnTimer;
   Timer.Enabled := false;
   Application.OnMessage := AppMessage;
end;

procedure TKeyLog.OnTimer(Sender: TObject);
begin
   Timer.Enabled := false;
   Process;
end;

procedure TKeyLog.Process;
begin
   Application.MessageBox(pwidechar('Keystroke ' + chr(Key)), '');
end;

end.
Klaus Kaiser
  Mit Zitat antworten Zitat