Eingabe-event

Anfängerfragen zum Programmieren mit PureBasic.
Rockmaster
Beiträge: 105
Registriert: 28.04.2006 22:19

Eingabe-event

Beitrag von Rockmaster »

Ich arbeite mit dem befehl: GetAsyncKeyState_().
Daher muss ich viele abfragen machen welche tasten je gedrückt wurden...das hat den nachteil dass meine prozessorauslastung auf 100% ansteigt.
Gibt es eine funktion mit der ich testen kann ob überhaupt eine taste gedrückt wurde?
Dann würde mein Programm die abfrageserie nur dann ausführen wenn er weis das überhaupt was gedrückt wurde.
Ich benutze gar keine plattform (also kein screen,kein window,keine konsole)
Danke im vorraus <)
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

funktionen gibt es nur auf plattformen.

screen:

Code: Alles auswählen

If KeyboardPushed(#PB_Key_All)
console:

Code: Alles auswählen

If OpenConsole()
  Repeat
    Inkey()
  Until RawKey()
  CloseConsole()
EndIf

es gibt zwar auch eine konstante #PB_Shortcut_All (für AddKeyboardShortcut) aber scheinbar nur zur vollständigkeit/ für die zukunft, sie wird nicht bearbeitet.
my pb stuff..
Bild..jedenfalls war das mal so.
manunidi
Beiträge: 109
Registriert: 12.04.2006 22:44

Beitrag von manunidi »

Sowas hier dürfte eigentlich reichen:

100% Auslastung:

Repeat : Until GetAsyncKeyState_(#VK_ESCAPE)

machst du aber eine 10 millisekunden pause rein, was überhaupt nicht ins gewicht fällt, dann haste 0 prozent auslastung:

Repeat : Delay(10) : Until GetAsyncKeyState_(#VK_ESCAPE)
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

im fenster gibt [Wait]WindowEvent() ein #WM_KEYDOWN zurück.



ganz ohne GUI könntest du dir vielleicht eine #VK-tabelle / ein array anlegen

Code: Alles auswählen

Repeat
  For i=0 To 256
    If GetAsyncKeyState_(i)
      Debug i
    EndIf
  Next
  Delay(10)    
Until 0
[keine ahnung obe der berech 0-256 auch wirklich alle keys enthält]
my pb stuff..
Bild..jedenfalls war das mal so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

für GetAsyncKeystate_() braucht man keinen kontext.
das läuft auch ohne fenster oder screen.


ich hab mal in der win32.hlp geschaut, und bin auf GetKeyboardState gestoßen.
The GetKeyboardState function copies the status of the 256 virtual keys to the specified buffer.
vielleicht kannst du den buffer leichter darauf checken, ob überhaupt eine taste gedrückt wurde.

außerdem brauchst du nur einen API-Call fürs ganze keyboard,
und machst die auswertung dann rein rechnerisch,
das dürfte dir schon mal ne menge luft geben.

wenn du dann noch ein Delay einbaust, dürfte die CPU-Last deines Progs minimiert werden...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Rockmaster
Beiträge: 105
Registriert: 28.04.2006 22:19

Beitrag von Rockmaster »

ok thx für eure hilfe! Die methode mit den 10 millisekunden abwarten hat mich überzeugt ich werde die anwenden.
Plattformen kann ich ja nicht benutzen da diese aktiv sein müssen um tasten aufzuschnappen.
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 »

Ein tool, das dauerhaft im Hintergrund laufen soll, mit nem Delay bremst das
System. Entweder ein richtiger Keyboardhook oder ein unsichtbares Fenster,
was noch am einfachsten umzusetzen ist.
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> ein richtiger Keyboardhook
ist das dann ein event-warter?


> ein unsichtbares Fenster

aber das reagiert ja auch nicht auf tastendrücke, die zu anderen fenstern gehören...
und GetAsyncKeystate_() erzeugt doch kein Event auf das WaitWindowEvent() reagiert....


@Rockmaster
denk vor allem mal drüber nach,
ob du mit einer interpretation des gesamten buffers den du von GetKeyboardState_()
bekommst nicht besser fährst, als mit zig aufrufen von GetAsyncKeystate_()
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 »

Da ich den Sinn und Zweck dieses Keyloggers nicht kenne, halte ich mich
lieber raus. GetAsyncKeystate ist auf jedenfall immer die schlechteste
Variante, das System wird immer stark belastet.
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
Rockmaster
Beiträge: 105
Registriert: 28.04.2006 22:19

Beitrag von Rockmaster »

ich hab in der Hilfsdatei nix zu GetKeyboardState_() gefunden...
Könnte mir bitte jemand nen crashkurs drüber geben?
Antworten