GetAsyncKeyState Problem

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

GetAsyncKeyState Problem

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

Und nu?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag 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.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
X0r
Beiträge: 2770
Registriert: 15.03.2007 21:47
Kontaktdaten:

Beitrag von X0r »

:oops:
Satic in PB kannte ich noch garnicht.

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