Autor Beitrag
masteroffinalfantasy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 82

Win XP
Delphi 2005 Architect
BeitragVerfasst: Do 16.08.07 11:32 
Servus

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 378

Win XP/Vista, Debian, (K)Ubuntu
Delphi 5 Prof, Delphi 7 Prof, C# (#Develop, VS 2005), Java (Eclipse), C++, QT, PHP, Python
BeitragVerfasst: Do 16.08.07 13: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Do 16.08.07 14:10 
user profile iconmasteroffinalfantasy hat folgendes geschrieben:
Servus

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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 16.08.07 18: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 ^^ ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.