Systemweit Tastatureingaben abfangen (Mit GetKeyState!!!)
-
Hallo, ich wollte nur darauf aufmerksam machen, dass man um systemweit Tastatureingaben anzufangen keine KeyHooks oder DLLs einbinden muss, das Ganze geht ganz einfach mit GetKeyState:
void __fastcall TForm1::Timer1Timer(TObject* Sender) { if (::GetKeyState(VK_RETURN)) ShowMessage("Die Eingabetaste wird gedrückt."); }
Das hab ich in einem Programm so gemacht, das dafür da ist, sobald eine Taste gedrückt wird, dass das Programm dann ein Wort für einen eintippt. Es klappt, ich habs getestet.
MfG Windoof
-
kannst du mir mal deinen code schicken: surfman19@gmx.at
wär klass...mfg surf.
-
Hi kannst du mir den Quelletext gleich auch mal mailen?
Bin auch gerade beim basteln einer Tastaturabfrage.
Danke!
-
Allerdings fallen so alle Tastendrücke durch's Sieb, die zwischen den Timerevents passieren, die Lösung ist äusserst unzuverlässig.
Im Gegensatz dazu reagiert die Hook-Variante auf jeden einzelnen Tastendruck.
-
willst du dir mal meine variante zu keyhook anschauen???
mich würd interessieren was du dazu sagst!???
darf man dir mailen??cu
-
Wozu Quellcode schicken? Der Quelltext steht doch da, mit einer if-Bedingung einen Tastendruck abfangen (Wichtig sind die beiden Doppelpunkte vor der Funktion GetKeyState, sonst klappts nicht, Gibt die Funktion einen Wert zurück, der kleiner als 0 ist, ist die Taste gedrückt,. wenn nicht (also >=0), dann ist die Taste nicht gedrückt. Beispiel:
if (::GetKeyState(VK_UP)<0) U=true; else if (U) { U=false; // [...] }
So hab ich das in einem Programm gelöst, das erst reagiert, wenn eine Taste gedrückt wurde und wieder losgelassen wurde.
@Jansen: Man kann den Timer auch auf 5 Millisekunden stellen, da sollten allerdings nur Abfragen drinstehen.
PS: Ich werd mein Programm und den Code dazu bald zum Download anbieten unter: www.cpp-club.net
EDIT: Du kannst natürlich auch eine Funktion schreiben, die im Programm nur einmal aufgerufen wird, mit einer while(true)-Schleife, und Application->ProcessMessages() drin.
-
Windoof schrieb:
Man kann den Timer auch auf 5 Millisekunden stellen, da sollten allerdings nur Abfragen drinstehen.
Du kannst den Timer auch auf eine Millisekunde stellen und wirst früher oder später trotzdem Eingaben verpassen.
-
Das ist mir bei dem Programm noch nie passiert, und ich hab nen Interval von 10 genommen. Selbst als ich nur ganz kurz eine Taste angetippt habe, hat's geklappt, denn wenn man eine Taste drückt... Was meinst du, wilange es bdauert, bis man sie wieder losgelassen hat?
-
Hallo
die Einstellung fuer den Timer ist min. 55 ms (sollte eigentlich bekannt sein)
(dh ca 18 Zeichen/sek) Wenn jemand schneller schreibt oder andere Ereignisse
wichtiger sind (Prioritaet Timer ist niedrig) => Es gehen Zeichen verloren !MfG
Klaus
-
KlausB schrieb:
die Einstellung fuer den Timer ist min. 55 ms (sollte eigentlich bekannt sein)
Nö, das wäre mir neu, zumal es bei mir einen großen Unterschied macht, ob ich den Timer auf 5 ms oder auf 50 ms stelle, das merkt man wirklich, also stelle ich dabei fest, dass das nicht so ist.
Apropos: Hab jetzt mein Programm zum Download gestellt: www.cpp-club.net Das Programm heißt sinnvollerweise "Cheater".
-
Och kinder.... lasst Windoof doch... Er weiss bestimmt alle Risiken und Probleme welche die Verwendung von TTimer mit sich bringt und welche Probleme in einer komplexen Applikation entstehen können. Immerhin hat er ja reichlich Erfahrung und Wissen über die Interna von Windows und der VCL.
-junix
-
junix schrieb:
Er weiss bestimmt alle Risiken und Probleme welche die Verwendung von TTimer mit sich bringt und welche Probleme in einer komplexen Applikation entstehen können.
Ja, das weiß ich. Das was ich damit angestellt habe ist keine sehr komplexe Anwendung, von daher...
Ich wollte auch nur zum Ausdruck bringen, dass man nicht gleich eine DLL-Datei einbinden muss oder Keyooks verwenden muss, nu um systemnweit Tastatureingaben abzufangen, bei einer kleinen Anwendung reicht GetKeyState vollkommen aus, aber leider hab ich hier im Forum noch nie etwas darüber gelesen, jedenfalls nicht im Sinne von "Systemweit".
MfG Windoof
-
Typisch Fachinformatiker.
Die sind alle so.
-
Kriminell wird es, wenn die Dummen fleißig werden ...
-
Die sind alle so.
Aber nur die "Anwendungsentwickler"!
Damit aber genug der Spässe, bitte keine weiteren OffTopic-Kommentare.