Seite 1 von 1
GetAsyncKeyState Problem
Verfasst: 14.09.2008 18:31
von X0r
Hallo!
Nach MSDN müsste dieser code prüfen, ob die Taste "gedrückt" wurde(also nicht gedrückt gehalten wird):
GetAsyncKeyState_(#VK_LBUTTON)&1
Funktioniert auch wunderbar, nur mit den Tastatur VK-codes klappts irgendwie nicht:
GetAsyncKeyState_(#VK_Space)&1
Verfasst: 14.09.2008 18:59
von STARGÅTE
Kann ich nicht bestätigen, funzt bei mir ...
Code: Alles auswählen
Repeat
If GetAsyncKeyState_(#VK_SPACE)&1
Debug "SPACE"
EndIf
ForEver
Mögliches problem ist, dass das GetAsyncKeyState von viele MS-Programmen genutzt wird, falls dort dann schon einmal dieses Abfrage gemacht wird, fäält das Event wieder weg, weil es ja nur "einmal" abgegeben werden soll
Verfasst: 14.09.2008 19:13
von AND51
"&1" ist nicht nötig. Es reicht,
If GetAsyncKeyState_(#VK_SPACE) abzufragen. Falls wahr, weißt du, dass die Taste zumindest seit der letzten Abfrage einmal gedrückt wurde oder seit dem gedrückt gehalten wird.
Die MSDN schreibt außerdem:
MSDN hat geschrieben:If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior; for more information, see the Remarks.
Man darf sich also nicht darauf verlassen, dass die Bits entsprechend gesetzt wurden - du verlässt dich aber einfach darauf.
Verfasst: 14.09.2008 19:27
von X0r
Und nu?
Verfasst: 14.09.2008 19:43
von STARGÅTE
du macht n eigene Abfrage auf Klick-Druck
Code: Alles auswählen
Repeat
Key = GetAsyncKeyState_(#VK_SPACE)
If Key And Not DruckSpace
DruckSpace = #True
ElseIf Not Key And DruckSpace
Debug "Klick"
DruckSpace = #False
EndIf
ForEver
Verfasst: 14.09.2008 19:52
von X0r
Ja klar, hab ich mir ganz am Anfang auch gedacht, aber keine elegante Methode. Vor allem nicht wenn ich so ne Funktion in meine Lib einbauen will.
Verfasst: 14.09.2008 20:11
von STARGÅTE
so besser :
Code: Alles auswählen
Procedure MyKeyPushed(KeyID)
Static Dim KeyDown.b(255)
Protected Event
Event = GetAsyncKeyState_(KeyID)
If Event And Not KeyDown(KeyID)
KeyDown(KeyID) = #True
ElseIf Not Event And KeyDown(KeyID)
KeyDown(KeyID) = #False
ProcedureReturn #True
EndIf
EndProcedure
Repeat
If MyKeyPushed(#VK_SPACE)
Debug "Space"
EndIf
If MyKeyPushed(#VK_D)
Debug "D"
EndIf
ForEver
Verfasst: 14.09.2008 20:15
von X0r
Satic in PB kannte ich noch garnicht.
Ok, dann ist die Sache natürlich klar. Danke.