@DGL-Luke: Nein, das ist kein Problem vom Delphimemorymanager. Wie bereits geschrieben wird die
DLL bei einem Aufruf von SetWindowsHookEx in jedem Prozess neu geladen, so als würde in dem Prozess jemand einen lokalen Hook mit SetWindowsHookEx starten. Ein globaler Hook ist sozusagen ein Rundruf das so ziemlich jeder einen Lokalen Hook auf die Adresse-X in der
DLL-X setzen soll. Dabei laden dann die Prozesse die
DLL und setzen eben einen lokalen Hook auf die Funktion.
Einziges was es in Delphi nicht gibt (was in C++ wohl einfacher gelöst ist) das es da gemeinsam genutzen Speicher ohne den Umweg über mmf's gibt.
Das ganze ist aber auch logisch, denn wenn die Messages von anderen Prozessen an die Hook-Procedure des geinen Prozesses übergeben werden würden wären die Adressen welche sich teilweise in WParam und LParam befinden völlig nutzlos da die Adressen nur im anderen Prozess gültig sind (also in dem Prozess wo sie her kommen).