Prüfen ob Taste losgelassen wurde?
-
Hi Leute!
Ich habe da ein Blödes Problem mit GetAsyncKeyState.
Wenn man F5 drückt, soll bei meinem Trainer ein Cheat aktiviert werden, wenn man nochmal draufdrückt, soll dieser wieder deaktiviert werden. Das blöde ist nun, wenn man auf F5 drückt, wird der cheat andauernd Aktiviert und Deaktivert. Man müsste die taste ganz ganz kurz drücken, um ihn vernünftig zu aktivieren. So möchte ich das aber nicht, deshalb bin ich auf die idee gekommen nicht zu prüfen ob eine taste gedrückt, sondern ob sie losgelassen wurde! Also wenn F5 losgelassen wurde, aktiviere Cheat.Kann mir da jemand helfen?
Gibt es auch ne möglichkeit das eleganter zu lösen? Wenn nicht, auch nicht schlimm.Danke im Vorraus
-
Ich weiß ja nicht, was Du genau machst, aber:
wie wärs denn mit einem OnKeyDown/Up-Event?mfg
-
klingt gut, aber wie macht man das?
-
wenn du eine normale win32, also .exe-Anwendung mit min. einem Dialogfenster und Klassenassistent usw. hast,
dann kann ich Dir helfen...
aber das muss ich vorher wissen.
...
-
Ja, ich mache eine MFC anwendung, falls du das meinst!?
-
So, Du musst ein Event hinzufügen:
Du nimmst den Klassenassistenten, erste Registerkarte Nachrichtenzuordnungstabellen, wählst bei den ObjektIDs die DialogKlasse (z.B. CMyDlg meist ganz oben) aus und bei Nachrichten "PreTranslateMessage". Dann "Funktion hinzufügen" und "Code bearbeiten".
Die Memberfunktion für dieses Event ergänzt Du dann wie folgt:
BOOL CPerlDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen if (pMsg->message == WM_KEYDOWN) { //Code zur weiteren Auswertung und Verarbeitung hier einfügen if (pMsg->wParam == 116) // <F5>-Taste { //-- Tue irgendwas... ...; } } return CDialog::PreTranslateMessage(pMsg); }in pMsg->wParam steht dann der ASCII-Code der gedrückten Taste (für F5 = 116).
Kannst ja jetzt mal ausprobieren, ob Dir das weiterhilft...
Viele Erfolg,
Sebastian
-
leider klappt das nicht, denn die Taste wird nur erkannt, wenn meine anwendung den Focus hat, aber sie soll die taste immer erkennen! Sinn und zweck der F tasten belegung, ist die Cheats auch aktivieren zu können, während man im Spiel ist.
-
Servus,
wenn ich mich kurz mal dazwischen schmeißen kann, wenn du wirklich die Tasten in einer anderen Anwendung abfangen willst musst du für dieses Fenster einen Hook setzen. Das ist garnicht mal so einfach, wenn man das schonmal gemacht hat dann geht das *g*. Also mach dich am besten mal mit der Funktion SetWindowsHookEx vertraut. Die Funktion kann dir einen Hook des Typ Keyboard setzen. Damit das ganze auch klappt brauchst du am besten eine kleine *.dll in der du die Grundstruktur des Hooks schreibst bzw. welche Tasten er abfangen soll. Ich hatte das schonmal gemacht. Suche am besten hier im Forum mal nach SetWindowsHookEx ansonsten gibs irgendwo schon eine fertige Dll mit Anwendung bei [url] www.codeproject.com [/url]. Die Anwendung heisst glaube ich Keyboardhook. Damit kannst du Hooks auf ein Fenster legen, solange du das Handle von diesem Fenster hast. Das Handle bekommst du z.B. über den Namen des Fenster mit EnumWindowsProc.....
Das ist nicht so einfach aber mit ein bisschen Grips geht das
*winke*
Hellsgore