AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hook DLL Fehler

Ein Thema von yvesdaeschle · begonnen am 7. Jan 2005 · letzter Beitrag vom 7. Jan 2005
Antwort Antwort
yvesdaeschle

Registriert seit: 22. Nov 2004
Ort: Efringen
26 Beiträge
 
Delphi 6 Personal
 
#1

Hook DLL Fehler

  Alt 7. Jan 2005, 12:35
Hallo Zusammen,

ich brauch dringen Hilfe. Ich programmiere gerade eine Hook DLL, welche mir die Mausereignisse an mein Hauptprogramm schickt. Doch bei dem UninstallHook aufruf, stürzt mir jedes mal, wenn ich debugge, der Rechner ab. Nur als ich das Programm alleine gestartet habe, habe ich den Fehler lesen können. Kann damit aber leider nichts anfangen.

http://www.yvesdaeschle.de/error_d6.gif

Hier der Code der DLL:

Delphi-Quellcode:
library Hook;

uses
  Windows,
  Messages;

type
  TPMsg = ^TMsg;

  PMMFData = ^TMMFData;
  TMMFData = record
    NextHook: HHOOK;
    WinHandle: HWND;
    MsgToSend: Integer;
  end;

var
  HookHandle: Cardinal = 0;
  WindowHandle: Cardinal = 0;

  FileMapObj: THandle;
  FileMapView: ^Integer;

  Kill: Boolean;

  MMFHandle: THandle;
  MMFData: PMMFData;

const
  WM_MOUSEHOOKMSG = WM_USER + 2706;
    MMFName = 'CSMouseHook';

function CreateMMF(Name: string; Size: Integer): THandle;
begin
  Result := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, Size, PChar(Name));
  if Result <> 0 then
  begin
    if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      CloseHandle(Result);
      Result := 0;
    end;
  end;
end;

function OpenMMF(Name: string): THandle;
begin
  Result := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, PChar(Name));
  // The return value is an open handle to the specified file-mapping object.
end;

function MapMMF(MMFHandle: THandle): Pointer;
begin
  Result := MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
end;

function UnMapMMF(P: Pointer): Boolean;
begin
  Result := UnmapViewOfFile(P);
end;

function CloseMMF(MMFHandle: THandle): Boolean;
begin
  Result := CloseHandle(MMFHandle);
end;

function UnMapAndCloseMMF: Boolean;
begin
  Result := False;
  if UnMapMMF(MMFData) then
  begin
    MMFData := nil;
    if CloseMMF(MMFHandle) then
    begin
      MMFHandle := 0;
      Result := True;
    end;
  end;
end;

function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM):
 LRESULT; stdcall;
begin

  Result := 0;
  MMFHandle := OpenMMF(MMFName);
  if MMFHandle <> 0 then
  begin
    MMFData := MapMMF(MMFHandle);
    if MMFData <> nil then
    begin
      if (nCode < 0) or (wParam = PM_NOREMOVE) then
        Result := CallNextHookEx(MMFData.NextHook, nCode, wParam, lParam)
      else
      begin
        Kill := True;
        SendMessage (MMFData.WinHandle, WM_MOUSEHOOKMSG, wParam, lParam);

        //if Kill then TPMsg(lParam)^.message := WM_NULL;
        Result := CallNextHookEx(MMFData.NextHook, nCode, wParam, lParam)
      end;
      UnMapMMF(MMFData);
    end;
    CloseMMF(MMFHandle);
  end;
end;

function InstallHook(Hwnd: Cardinal): Boolean; stdcall;
begin

  Result := False;
  MMFHandle := 0;
  MMFData := nil;
  Result := False;
  if (MMFData = nil) and (MMFHandle = 0) then
  begin
    MMFHandle := CreateMMF(MMFName, SizeOf(TMMFData));
    if MMFHandle <> 0 then
    begin
      MMFData := MapMMF(MMFHandle);
      if MMFData <> nil then
      begin
        MMFData.WinHandle := hWnd;
// MMFData.MsgToSend := MsgToSend;
        MMFData.NextHook := SetWindowsHookEx(WH_MOUSE, @MouseHookProc, HInstance, 0);

        if MMFData.NextHook = 0 then
          UnMapAndCloseMMF
        else
          Result := True;
      end
      else
      begin
        CloseMMF(MMFHandle);
        MMFHandle := 0;
      end;
    end;
  end;
end;

function UninstallHook: Boolean; stdcall;
begin
//Hook aus der Hookchain entfernen
//Uninstall hook from hook chain
  Result := False;
  if (MMFData <> nil) and (MMFHandle <> 0) then
    if UnHookWindowsHookEx(MMFData.NextHook) then
      Result := UnMapAndCloseMMF;
end;


exports
//Installations- und Deinstallationsroutine exportieren
//Export the installation and deinstallation routine
  InstallHook,
  UninstallHook;
end.
der Aufruf

Delphi-Quellcode:
function UninstallHook: Boolean; stdcall; external 'mousehook.dll';

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UninstallHook;
end;
Bei Aufruf, kommt der Fehler und ich weis nicht an was es liegt, weil die DLL an sich selber funktioniert!

Weis jemand an was das liegen kann?

Yves

[edit=Christian Seehase]Code-Tags durch Delphi-Tags ersetzt. Mfg, Christian Seehase[/edit]
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Brauche dringend Hilfe - DLL Fehler

  Alt 7. Jan 2005, 13:11
Moin Yves,

korrigiere bitte mal Deinen Thread-Titel.
Dass Du Hilfe brauchst lässt sich denken, sonst hättest Du hier ja keinen aufgemacht.
Danke.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz