Einzelnen Beitrag anzeigen

blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Tastatur/Maus-Hook: Internet Explorer stürzt wegen DLL a

  Alt 4. Dez 2008, 21:07
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
Daniel Marschall
  Mit Zitat antworten Zitat