AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Wie kann ich Tastaturaktionen über meine Anwendung loggen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann ich Tastaturaktionen über meine Anwendung loggen?

Ein Thema von cckLoud · begonnen am 20. Sep 2021 · letzter Beitrag vom 22. Sep 2021
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.608 Beiträge
 
Delphi 7 Professional
 
#1

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

  Alt 21. Sep 2021, 09:16
Für den Fall, dass in Application.OnMessage schon was drinne stehen sollte, geht Dir das bei Deiner Implementierung verloren.

Damit Du unabhängiger wirst, speichere Dir doch den Inhalt von Application.OnMessage doch im Create in 'ner Variabel (fAppMessage oder so) und rufe die Routine dann in TKeyLog.AppMessage auf. Ungetestet sowas in der Art:
Delphi-Quellcode:
procedure TKeyLog.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
   if not fActive then begin
     if Assigned(fAppMessage) then fAppMessage(Msg, Handled);
     exit;
   end;
// 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;
   if Assigned(fAppMessage) then fAppMessage(Msg, Handled);
end;
  Mit Zitat antworten Zitat
cckLoud

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

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

  Alt 21. Sep 2021, 14:38
Warum sollte da was verloren gehen, was meinst du damit? "Handled" ist auf false, also geht die Message weiter (erfolgreich bestätigt). Und ich brauche bei meinem Problem eigentlich nur die Zeit, zu der die Taste gedückt wurde. Und da kommt es auf ein paar Milisekunden auch nicht an, die der Timer-Event braucht, um durch die Message.Schleife zu kommen...
Klaus Kaiser
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.608 Beiträge
 
Delphi 7 Professional
 
#3

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

  Alt 21. Sep 2021, 15:03
Wenn irgendwo im Programm eine Zuweisung der Art Application.OnMessage := EineOnMessageRoutine; erfolgte und Du machst später in Deinem constructor TKeyLog.Create; dann diese Zuweisung Application.OnMessage := AppMessage; , so wird die Routine EineOnMessageRoutine niemals beim Ereignis OnMessage aufgerufen werden und geht Dir damit verloren.

Es mag sein, dass das im konkreten Fall irrelevant ist, aber halt einfach zu prüfen, ob schon was zugewiesen wurde und das dann auch aufzurufen, ist nicht der große Aufwand, eventuell durch den Nichtaufruf auftretende Seiteneffekte zu erkennen und zu beheben, dürfte deutlich aufwändiger sein.
  Mit Zitat antworten Zitat
cckLoud

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

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

  Alt 21. Sep 2021, 17:53
Ja, ok, das ist aber klar. Wenn du eine Ereignisroutine überschreibst, dann kommt halt nur die letzte dran. Aber sowas ist halt normales Programmiergeschäft. Und da man sich hier abspricht, bzw., wie bei mir, allein programmiert und dabei (hoffentlich! ) den Überblick behält, das tägliches Projekthandling.

Bei mir ist es als Entertainer tatsächlich einfacher, da ich WEISS, das der Event nirgends sonst benutzt wird!
Klaus Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.817 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 22. Sep 2021, 11:12
Wie gesagt, nicht Application.OnMessage sondern TApplicationEvents.OnMessage verwenden.

Denn wenn du deinen TKeyLog mehrmahls erstellst oder jemand Anderes (z.B. Fremdkomponente oder eine andere Stelle, die du schonwieder vergessen hast),
dann blockiert/überschreibt man sich selber.


An Application.OnMessage kann sich nur Einer gleichzeitig dranhängen.
TApplicationEvents kann aber mehrmals verwendet werden.
z.B. auf eine/mehrere Forms eine/mehrere TApplicationEvents drauf oder eben Mehrere davon mit Create selbst erstellen.


da ich WEISS, das der Event nirgends sonst benutzt wird!
Und dann nutzt du von jemand Anderem eine Komponente oder Codestück
und jener Entwickler dachte genau das Gleiche.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (22. Sep 2021 um 11:27 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz