Keyboardhook
-
Hallo,
ich möchte bestimmte Tastatureingaben umleiten (Ich weiss, dass es auch andere Möglichkeiten als einen Hook gibt, aber ich brauche einen Hook auch aus anderen Gründen)
Beispiel: Wenn die 'm' Taste gedrückt wird, soll Windows denken, die 'r' Taste wurde gedrückt.Mein erster Versuch funktioniert, aber ich denke, man kann das innerhalb der KeyboardProc auch besser lösen...
// VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A) #define VK_M 0x4D #define VK_R 0x52 ... LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HC_ACTION) { LPKBDLLHOOKSTRUCT p = reinterpret_cast<LPKBDLLHOOKSTRUCT>(lParam); if (!(p->flags & LLKHF_UP) && p->vkCode == VK_M) { keybd_event(VK_R, p->scanCode, p->flags, p->dwExtraInfo); return 1; } } return CallNextHookEx(NULL, nCode, wParam, lParam); }MfG,
Max
-
Das Einzige, was mir hier einfällt, ist, dass keybd_event als obsolet deklariert ist und man SendInput verwenden soll.
-
Hast Du einfach mal versucht die Daten in der Struktur zu verändern. Was sagt dei Doku dazu?
-
Ja, habe ich schon: Die alte Taste kommt an, es funktioniert also nicht.
In der Doku steht: wParam und lParam sind nur [in]
Aber sie müssten ja [inout] sein, damit das gehen würde...
-
Martin Richter schrieb:
Hast Du einfach mal versucht die Daten in der Struktur zu verändern. Was sagt dei Doku dazu?
Nein, das geht nicht.
Du kannst es entweder so machen wie bisher, oder einen Nachrichten Hook verwenden.
-
Oha, davon habe ich noch gar nichts gehört! Was ist denn ein Nachrichtenhook?
-
siehe MSDN
-
Habe ich gleich gemacht. Aber ich werde nicht schlau daraus.
Zuerst einmal: Meinst du WH_GETMESSAGE Hooks oder WH_MSGFILTER and WH_SYSMSGFILTER Hooks?
-
WH_GETMESSAGE
-