Einzelnen Beitrag anzeigen

blackdrake

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

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

  Alt 4. Dez 2008, 20:27
Hallo.

Attach und Detach werden nun ausgeführt, nachdem ich DLLProc gesetzt habe.

Seitdem ich auf pView <> nil prüfe, stürzt Internet-Explorer nicht mehr ab.

Das Problem ist aber, dass pView = nil wird. Das ist jetzt natürlich ziemlich problematisch und auch das Schreiben in die Logdatei schlägt beim Aufruf von InternetExplorer mit dem RunTime Error 5 (File inaccessable) ab. Was kann ich tun?

Zusätzliche Frage: Wie ist es möglich, den DLL-Teilprozess zu terminieren, wenn pView doch mal nil werden sollte?

Der DLL-Code sieht nun so aus:

Delphi-Quellcode:
procedure Log(N: string); // debug
var
  f: TextFile;
begin
  AssignFile(f, 'c:\meinlog.txt');
  Append(f);
  WriteLn(f, N);
  CloseFile(f);
end;

procedure DllMain(Reason: DWORD);
begin
  case Reason of
    DLL_PROCESS_ATTACH:
      begin
        hMapping := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, MappingGUID);
        pView := MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);

Log('Attach');
        if pView <> nil then
          TargetHandle := PCardinal(pView)^; // ToDo: Wenn nil, sollte DLL terminiert werden
if pView = nil then
log('Fehler 1');
      end;
    DLL_PROCESS_DETACH:
      begin
Log('Detach');
        if pView <> nil then
          UnmapViewOfFile(pView);
if pView = nil then
log('Fehler 2');
        CloseHandle(hMapping);
      end;
  end;
end;

begin
  WM_ANYKEYPRESSED := RegisterWindowMessage('WM_ANYKEYPRESSED');
  WM_LMB_KEY_CONFIRM := RegisterWindowMessage('WM_LMB_KEY_CONFIRM');
  WM_RMB_KEY_CONFIRM := RegisterWindowMessage('WM_RMB_KEY_CONFIRM');

  DllProc := @DllMain;
  DllProc(DLL_PROCESS_ATTACH);
end.
Nachtrag! Ignoriert man diesen Fehler, wird trotz des pView=nil das Tastaturereignis (WH_KEYBOARD_LL SendMessage) an die Host-Applikation (TargetHandle) weitergegeben. Das Maus-Ereignis (WH_MOUSE SendMessageTimeOut) wird aber nicht weitergegeben, die Maustaste kann also nicht durch die Host-Applikation gesperrt werden! Seltsamerweiße funktioniert das ähnliche Programm MTANWT einwandfrei mit Internet Explorer. Was ist das Geheimnis?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat