Suche Tutorial für umgang mit GetAsyncKeyState

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Suche Tutorial für umgang mit GetAsyncKeyState

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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 :mrgreen:

Gruß

Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

> ich wüsste z.b. nicht wie der code funktionieren soll ohne erst ein fenster zu öffnen
Garnicht :mrgreen:
Sieht mir mal wieder nach nem Keylogger aus, da werde ich nicht helfen wollen :evil:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten