Seite 1 von 1
Nach GetAsyncKeyState_ Keyboardpuffer leeren?
Verfasst: 30.06.2006 07:53
von Morty
Guten Morgen.
Also mein Problem ist folgendes:
Ich arbeite in einer Anwendung mit
um Elemente weiter zu schalten. Leider reagiert er aber x-mal auf einen Tastendruck, so dass es mir nicht möglich ist, nur ein Element weiter zu schalten.
auch
liefert das gleiche Problem.
Deshalb kam mir die Idee, den Keyboardpuffer irgendwie zu leeren (kann mich erinnern, sowas in anderen Sprachen schonmal gesehen zu haben). Leider hab ich in der MSDN nichts passendes gefunden.
Ich hoffe einer von euch kann mir weiter helfen.
Danke
Morty
Re: Nach GetAsyncKeyState_ Keyboardpuffer leeren?
Verfasst: 30.06.2006 09:20
von Kiffi
> Leider reagiert er aber x-mal auf einen Tastendruck, so dass es mir nicht
> möglich ist, nur ein Element weiter zu schalten.
so sollte es gehen:
Code: Alles auswählen
Repeat
If GetAsyncKeyState_(#VK_ESCAPE)
Debug "ESC"
While GetAsyncKeyState_(#VK_ESCAPE) <> 0
Delay(0)
Wend
EndIf
ForEver
Grüße ... Kiffi
Verfasst: 30.06.2006 09:28
von Morty
Danke, funktioniert super.
Da stand ich wohl ein bissl auf'm Schlauch
Mein Problem sehe ich damit gelöst, wäre aber trotzdem interessant zu wissen ob's ne Möglichkeit gibt, den Keyboardpuffer zu leeren?
Morty
Verfasst: 30.06.2006 12:52
von Kaeru Gaman
ermn..
das ding arbeitet nicht mit keyboardpuffer, sondern gibt den momentanen status zurück, d.h. solange die taste gedrückt ist, liefert die abfrage den gedrückt-status, sooft halt in der zeit die schleife durchlaufen wird.
Kiffi hat hier die einfachste lösung angeboten: warten, bis taste wieder losgelassen.
wenn du in der zwischenzeit noch etwas anderes machen willst, also, keine warteschleife benutzen kannst wie Kiffis beispiel, musst du mit flags arbeiten:
Code: Alles auswählen
; - Hauptschleife Anfang
...
; irgendwo drin
; Tastenabfrage
If GetAsyncKeyState_(#VK_ESCAPE) And EscAct = 0
EscAct = 1
; das was passieren soll, wenn Esc gedrückt wird
EndIf
If GetAsyncKeyState_(#VK_ESCAPE) = 0
EscAct = 0
EndIf
...
; - Hauptschleife Ende
durch das Flag wird sichergestellt, dass die aktion genau einmal pro tastendruck ausgeführt wird.
wie gesagt, dass ist nur nötig, wenn deine schleife kontinuierlich laufen muss, sonst kannst du auch einfach aufs loslassen warten wie von Kiffi vorgeschlagen.
Verfasst: 30.06.2006 13:27
von nco2k
@KG
kleiner fehler:
If GetAsyncKeyState_(#VK_ESCAPE) = 0
statt
If GetAsyncKeyState_(#VK_ESCAPE) <> 0
c ya,
nco2k
Verfasst: 30.06.2006 13:43
von Kaeru Gaman
ach, thnx.. denkfehler.. hatte es grad bei Kiffi rausgepatcht... >__<"
ist editiert.
-------------------
PS:
ergänzende anmerkung:
die ifs müssen getrennt sein, wegen das AND in der bedingung. wer lieber mit ELSE arbeitet, muss die Flagprüfung separieren:
Code: Alles auswählen
; - Hauptschleife Anfang
...
; irgendwo drin
; Tastenabfrage
If GetAsyncKeyState_(#VK_ESCAPE)
If EscAct = 0
EscAct = 1
; das was passieren soll, wenn Esc gedrückt wird
EndIf
Else
EscAct = 0
EndIf
...
; - Hauptschleife Ende
hierbei könnte man es als vorteil ansehen, dass die API nur einmal angesprochen werden muss -> performance