Hallo.
Danke für den Hinweis. Ich habe jetzt auf die
DLL-Proc verzichtet und habe nun folgenden Code:
Delphi-Quellcode:
begin
WM_ANYKEYPRESSED := RegisterWindowMessage('WM_ANYKEYPRESSED');
WM_LMB_KEY_CONFIRM := RegisterWindowMessage('WM_LMB_KEY_CONFIRM');
WM_RMB_KEY_CONFIRM := RegisterWindowMessage('WM_RMB_KEY_CONFIRM');
hMapping := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, MappingGUID);
pView := MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
if pView <> nil then
begin
TargetHandle := PCardinal(pView)^;
UnmapViewOfFile(pView);
CloseHandle(hMapping);
end
else
begin
ExitCode := 1;
end;
end.
Das mit dem Schreibzugriff verstehe ich nicht ganz.
Die Host-APP legt die MemMap an mittels FILE_MAP_WRITE und schreibt das eigene WindowHandle hinein:
Delphi-Quellcode:
hMapping := CreateFileMapping(INVALID_HANDLE_VALUE,
nil, PAGE_READWRITE, 0, 4, MappingGUID);
pView := MapViewOfFile(hMapping, FILE_MAP_WRITE, 0, 0, 0);
PCardinal(pView)^ :=
Handle;
Die
DLL öffnet die MemMap mit FILE_MAP_READ und liest das
Handle.
Dann habe ich doch in der
DLL keinen Fehler gemacht, oder?
Und bezüglich des Exit-Code ungleich Null: Wird die
DLL dann automatisch entladen, wenn in der Initialisierung der ExitCode gesetzt wurde? Die Host-Applikation müsste dann doch trotzdem die
DLL-Export-Funktion InstallHooks() aufrufen, was ja bedeutet, dass die
DLL trotzdem arbeitet, obwohl ein Fehler festgestellt wurde.
PS: Internet Explorer läuft nun in eine Endlosschleife.
Gruß
blackdrake