KeyHook - Frage zur Auswertung der Tastencodes
-
Weiß darauf wirklich niemand eine Antwort?
-
Hallo
vergiß nicht, das alle (einfachen) Zeichen und damit Tastenbefehle einem ASCII-Zeichen entsprechen. Wenn du das ausführst
Caption = IntToStr(VK_RETURN);wirst du feststellen, das Enter dem ASCII-Wert 13 entspricht. Deshalb kannst du statt VK_RETURN auch 13 schreiben, das dann plattformübergreifend gilt. Die Nummern der andern KeyCodes kannst du genauso rausfinden.
/Edit :
Und die Rückumwandlung ist auch kein Problemint Number = '.'; Caption = char(Number);bis bald
akari
-
Welcher Datentyp hat "Code"? Werden da evtl. weitere Infos reincodiert? Wo wird "Code" gesetzt? Was ist der Inhalt von "Code" beim entsprechenden Vergleich? Schon den Debugger befragt?
-
akari schrieb:
Deshalb kannst du statt VK_RETURN auch 13 schreiben, das dann plattformübergreifend gilt.
Wo genau soll da dann der Unterschied liegen? VK_RETURN ist ein normales Makro, wo nichts weiter passiert, als das die entsprechenden Zeichen eingesetzt werden.
Also würde ich im Sinne der Lesbarkeit auf 13 verzichten und VK_RETURN einsetzen, da kein merklicher Gewinn aus der unlesbarmachung des Vergleichs entsteht.
-
Hallo
diese Anmerkung war auf diese Frage gemünzt
Gibt es irgendwelche Konstanten, mit denen man sie vergleichen kann? - Sind sie überhaupt überall gleich?
Natürlich sollte man unter Windows immer die Keycodes nehmen.
bis bald
akari
-
Vermute dein Problem liegt eher in der Auswertung des Übergabeparamters:
LRESULT CALLBACK DLL_EXP Tastaturhook(int nCode,WORD wp,DWORD lp)
hier wird der Key in wp geliefert und sollte mit
if((wp==VK_ESCAPE||wp==VK_RETURN)&&(lp&0x80000000))
auswertbar sein. Obiges Beispiel akzeptiert ESC und Return
-
Ohne das jetzt zu testen... ja, das scheint mein Problem zu sein ^^ - was bedeutet dieses 0x80000000?
-
Windoof schrieb:
Ohne das jetzt zu testen... ja, das scheint mein Problem zu sein ^^ - was bedeutet dieses 0x80000000?
Auszug aus der Hilfe von GetAsyncKeyState:
... If the most significant bit is set, the key is down ...
alles klar? hier wird nix anderes gemacht, als das höchstwertige bit zu testen (alle anderen bit werden durch die und-verknüpfung auf 0 gesetzt und nur die bits bleiben im 1. term gesetzt die im 2. term eine gesetzte 1 haben).
-
schau mal in der hilfe nach virtual keycodes oder soo
oder schau im internet nach ascii-tabellen
ansonsten geht ja immer noch:
if (Key=='a')
{
....
}
bye mollitz
-
mollitz:
Thema verfehlt, Setzen, Sechs!
Lies dir den Thread einfach nochmal komplett durch und vergiss nicht den Code, auf den sich die ursprüngliche Frage bezog.