Und irgendwie ist mir immer noch nicht klar, warum Ihr so auf dem
Handle oder der ID oder was auch immer des Prozesses oder Programmes herum reitet, welches den Hook gestartet hat. Die weiss ich ja. Aber wie komme ich an die PID, welche den Hook (oder von mir aus die
DLL) aufruft?
Weil die Nachricht vom Betriebssystem kommt und von keinem Programm.
Man kann sich in diese Nachrichtenschlange einhängen (hooken) also einen Einhänger (Hook) dort reinsetzen, da es sich um einen spezielle Nachrichttypen (WH_*) handelt, wo man sich einhängen kann.
Siehe
Hooks
Zitat:
A hook is a point in the system message-handling mechanism where an application can install a subroutine to monitor the message traffic in the system and process certain types of messages before they reach the target window procedure.
Dein Denkfehler ist, dass das Tastaturereignis
von einer Anwendung kommt.
Es ist aber genau umgekehrt. Die Tastatur weiß nichts von irgendeiner Anwendung. Die bekommt nur den Anschlag mit und erschreckt sich dabei so sehr, dass eine Nachricht an das Betriebssystem gegeben wird.
Dieses fühlt sich nun veranlasst eine Nachricht (WH_KEYBOARD_LL) zu verschicken.
Dann wird das aktive Fenster ermittelt und an die Anwendung wird das Tastaturereignis geschickt.
Also zum Zeitpunkt (WH_KEYBOARD_LL) hat sich noch keiner darum gekümmert, wer das Tastaturereignis empfangen soll.