Entwickler-Ecke

Algorithmen, Optimierung und Assembler - Dauer eines Tastendrucks ermitteln?


masteroffinalfantasy - Do 16.08.07 10:32
Titel: Dauer eines Tastendrucks ermitteln?
Servus

ich hab ein Prob... ich möchte eine Taste global abfangen, dass sollte so gehen:


Delphi-Quelltext
1:
if GetAsyncKeyState(VK_Return) < 0 then ... ;                    


Wie kann ich die exakte Dauer des Tastendruckes herausfinden ? :nixweiss:

Danke wie immer im voraus ;)


arj - Do 16.08.07 12:52

Window-Message des Tastendrucks abfangen -> mit GetTickCount den Wert speichern
Window-Message des Tastenloslassen abfangen -> mit GetTickCount den Wert speichern

Differenzen ergibt Dauer in Millisekunden.


Reinhard Kern - Do 16.08.07 13:10
Titel: Re: Dauer eines Tastendrucks ermitteln?
user profile iconmasteroffinalfantasy hat folgendes geschrieben:
Servus

ich hab ein Prob... ich möchte eine Taste global abfangen, dass sollte so gehen:


Delphi-Quelltext
1:
if GetAsyncKeyState(VK_Return) < 0 then ... ;                    


Wie kann ich die exakte Dauer des Tastendruckes herausfinden ? :nixweiss:

Danke wie immer im voraus ;)


1. GetAsyncKeyState liefert nur dem Thread ein Ergebnis, der den KB-Focus hat - funktioniert also nicht (bzw. selten) wie gewünscht.

2. Die anderen KB-Funktionen wie GetKeyState sind alles andere als Realtime, sondern geben den Zustand am Ende (!) der message queue an. Daraus kann man die Dauer des Drucks nicht genau bestimmen; da nicht feststeht, wann die queue abgearbeitet wird, genau genommen überhaupt nicht; der Fehler kann beliebig gross werden.

Gruss Reinhard


BenBE - Do 16.08.07 17:13

Wie bereits durch meine Vorredner gesagt: Genau geht's nicht.

Aber Grundlegend:
OnKeyDown --> Startzeit aufschreiben
OnKeyUp --> Endzeit aufschreiben, Differenz berechnen

Anbieten würden sich hier:
Now, Date und Time für Langsamtipper, GetTickCount für Normalschreiber oder QueryPerformanceCounter für die GANZ schnellen Schreiber ^^ ...