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?