Thema: Delphi AV bei MausHook

Einzelnen Beitrag anzeigen

perle

Registriert seit: 8. Apr 2004
183 Beiträge
 
Delphi 7 Enterprise
 
#1

AV bei MausHook

  Alt 2. Feb 2005, 14:12
Hallo zusammen, ich wollte einen Maushook schreiben, der eine Message an mein Programm schickt , wenn die Linke Maustaste gedrückt wurde (macht nicht viel Sinn, ist auch nur zu Testzwecken). Ich habe also folgendes zusammengebastelt :

Delphi-Quellcode:
library hookdll;

uses
  madExcept,
  madLinkDisAsm,
  SysUtils,
  Dialogs,
  windows,
  messages,
  Classes;

var
  HookHandle : Cardinal;
  ProgHwnd : Cardinal;

{$R *.res}

function mouseproc(ncode : Integer; wp : WPARAM; lp : LPARAM) : LRESULT ; stdcall;
begin
  result := CallNextHookEx(HookHandle,ncode,wp,lp);
  if (nCode = HC_ACTION) and (wp = WM_LBUTTONDOWN) then
  begin
    cds.dwData := wp;
    cds.cbData := 0;
    cds.lpData := nil;
    SendMessage(ProgHwnd,WM_COPYDATA,LongInt(HookHandle),LongInt(@cds));
  end;
end;

function InstallHook(aHandle : Cardinal) : BOOL; stdcall;
begin
    ProgHwnd := aHandle;
    HookHandle := SetWindowsHookEx(WH_MOUSE,@mouseproc,HInstance,0);
    if HookHandle <> 0 then
        result := TRUE
    else result := FALSE;
end;

function UninstallHook : BOOL; stdcall;
begin
    result := UnhookWindowsHookEx(HookHandle);
end;

exports
    InstallHook,
    UninstallHook;
begin
end.
ist das überhaupt bis hier hin richtig?
Naja, jedenfalls rufe ich die Installfunktion dann im Hauptprogramm mit
if InstallHook(handle) then showmessage('installiert'); auf, das wird auch ausgeführt, die message wird ausgegeben, und schwupps , gibts ne Zugriffsverletzung. Weiss jemand warum das so ist?
  Mit Zitat antworten Zitat