Seite 1 von 2
Suche Tutorial für umgang mit GetAsyncKeyState
Verfasst: 27.04.2009 00:11
von Sunny
Also, wie's schon im Titel steht
Ich suche eben ein Tutorial oder sowas in der Art, wo erklärt wird wie man mit dem Befehl GetAsyncKeyState umgeht...
Allerdings suche ich keine Allgemeine Erklärung von Windows-API's sondern speziell für den gebrauch in PureBasic.
Verfasst: 27.04.2009 00:40
von Kaeru Gaman
ich bezweifle, dass es ein tut speziell für diesen Befehl gibt...
was willst du denn wissen? ich komm mit damit recht gut klar.
Verfasst: 27.04.2009 00:48
von ts-soft
Die API wird in PB eigentlich nur in Ausnahmefällen benötigt, für Spiele gibts
die KeyBoard Lib und für Fenster die KeyBoardShortcuts.
Hier mal ein Beispiel für so eine Ausnahme, nämlich Feststellen ob Shift
gedrückt ist, beim Buttonklick.
Code: Alles auswählen
OpenWindow(0, 0, 0, 200, 50, "void", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(0, 10, 10, 180, 30, "test")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
GetAsyncKeyState_(#VK_SHIFT); erstmal alten Wert löschen
Select EventGadget()
Case 0
Select EventType()
Case #PB_EventType_LeftClick
If GetAsyncKeyState_(#VK_SHIFT)
Debug "Button + Shift gedrückt"
Else
Debug "Button gedrückt"
EndIf
EndSelect
EndSelect
EndSelect
ForEver
Im allgemeinen sollte man aber die besseren Alternativen nutzen, deshalb
macht ein Tutorial auch nicht so viel Sinn, da es ja nur in seltenen Fällen,
und dann eben zugeschnitten auf diese Fälle sein muß. Man sollte das
besser nur im Zusammenhang mit anderen Events nutzen.
Mein Ratschlag: Laß die Finger von dieser Funktion, wenn es andere
Lösungen gibt
Gruß
Thomas
Verfasst: 27.04.2009 00:57
von Sunny
Ähm...
Naja, ich hab vorhin ein wenig rungefummelt und mal so mitbekommen, dass das gar nicht so schwer ist wie ich dachte...
ich hab nur noch 1 problem
1. was kann ich machen, damit der befehl nicht zu schnell reagiert wenn ich ne taste drücke... weil wenn ich dann mal kurz eine taste drücke, dann erkennt das programm das 4 mal und häufiger, wobei ich denke, dass der Befehl Delay da auch keine richtige lösung ist
ich hoffe ich hab mich nicht zu undeutlich ausgedrückt.
danke im voraus
Verfasst: 27.04.2009 00:59
von Kaeru Gaman
lass dir mal den Rückgabewert debuggen.
beim allerersten press ist das ein anderer wert als beim festhalten.
also, wenn du genau gegen den ersten wert prüfst, wird nur ein einziger tastendruck ausgewertet.
... aber grundsätzlich stimmt schon, was ts sagt: wenn möglich, die PB-eigenen libs benutzen.
Verfasst: 27.04.2009 01:25
von ts-soft
Sunny hat geschrieben:
1. was kann ich machen, damit der befehl nicht zu schnell reagiert wenn ich ne taste drücke... weil wenn ich dann mal kurz eine taste drücke, dann erkennt das programm das 4 mal und häufiger, wobei ich denke, dass der Befehl Delay da auch keine richtige lösung ist
Welche Art von Programm haste den?
GetAsyncKeyState_() löst immer 2 events aus, eins für Up und eins für Down
Entweder man löscht eins, wie in meinem ersten Beispiel, oder man wertet
nur eins aus: GetAsyncKeyState_(#VK_SHIFT) & $8000
Ohne EventLoop würde ich den Befehl garnicht nutzen, und mit, nur nachdem
ein anderes bestimmtes Ereignis aufgetreten ist, wie in meinem Beispiel.
Consolen und fensterlose Anwendungen sollten das lieber nicht nutzen!
Die sollten dann einen entsprechenden KeyBoardHook nutzen, aber das ge-
hört hier nicht her.
Verfasst: 27.04.2009 01:32
von Sunny
ich danke euch allen vielmals
das hat mir wirklich weitergeholfen
jetzt hab ich aber noch ne frage...
ich hab hier schon inner sufu nachgeschaut und auch schon nachgegoogelt aber nichts wirkliches gefunden
ich suche noch nach einer liste für sonderzeichen, wie z.b. ".", ",", "ä", "ö", "ü", "-", "#", usw...
weiß jemand wo ich sowas finde?
Verfasst: 27.04.2009 02:08
von ts-soft
Warum nimmste nicht #WM_CHAR
Code: Alles auswählen
OpenWindow(0, 0, 0, 200, 50, "void", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #WM_CHAR
Debug Chr(EventwParam())
EndSelect
ForEver
Verfasst: 27.04.2009 02:26
von Sunny
nun ja... ich würde mal behaupten, weil ich mit der ganzen sache mit tastenabfrage und so noch nich so ganz klar komme, ich wüsste z.b. nicht wie der code funktionieren soll ohne erst ein fenster zu öffnen
Verfasst: 27.04.2009 02:30
von ts-soft
> ich wüsste z.b. nicht wie der code funktionieren soll ohne erst ein fenster zu öffnen
Garnicht
Sieht mir mal wieder nach nem Keylogger aus, da werde ich nicht helfen wollen
