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
:oops:
Satic in PB kannte ich noch garnicht.

Ok, dann ist die Sache natürlich klar. Danke.