Also Windows wird unbedienbar.. Zuerst hakt die Maus und dann geht irgendwann meistens gar nichts mehr. Wenn man Glück hat kommt der Dialog dass der Window Manager nicht mehr funktioniert und man kann dann noch auf den "Schließen" Button klicken bevor alles zusammenbricht. Wenn man das geschafft hat, dann normalisiert sich wieder alles.
Jetzt habe ich mein Programm mit meiner
DLL mal in einer VM (Win XP) getestet und dort meckerte meine Anwendung zuerst, dass die Datei "borlndmm.dll" fehlen würde. Das Programm startete aber dennoch. Der Hook wird aber nicht erfolgreich installiert. Jetzt habe ich diese
DLL in die VM kopiert und der Hook wird installiert. Allerdings taucht dann auch der oben beschriebene Effekt auf.
Mein Code (
DLL):
Delphi-Quellcode:
library HookDLL;
uses
ShareMem,
Windows,
SysUtils,
Classes;
{$R *.res}
var
FHook: HHOOK;
function HookProc(code: Integer; wParam: Cardinal; lParam: Cardinal): Cardinal; stdcall;
begin
if code < HC_ACTION then
Result := CallNextHookEx(FHook,code,wParam,lParam)
else
begin
// Code
Result := CallNextHookEx(FHook,code,wParam,lParam);
end;
end;
procedure InstallHook; stdcall;
begin
FHook := SetWindowsHookEx(WH_GETMESSAGE,@HookProc,hInstance,0);
// Nur zu Testzwecken:
if FHook <> 0 then
MessageBox(0,'Installiert!','Test123',0);
end;
procedure UnInstallHook; stdcall;
begin
if FHook <> 0 then
UnhookWindowsHookEx(FHook);
end;
exports
InstallHook,
UnInstallHook,
HookProc;
begin
end.
Programm (Ausschnitt):
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var lib: hModule;
begin
FHookInst := LoadLibrary('HookDLL.dll');
if (FHookInst <> 0) then
begin
FHookInstall := GetProcAddress(FHookInst,'InstallHook');
FHookUnInstall := GetProcAddress(FHookInst,'UnInstallHook');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Assigned(FHookInstall) then
FHookInstall;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(FHookUnInstall) then
FHookUnInstall;
end;
Ok, ich habe vllt. grade eine Vermutung. Könnte es sein, dass das Problem darin liegt, dass FHook in den Instanzen in anderen Prozessen immer 0 ist und dann zu Fehlern führt?
PS: Hatte dein Tutorial gelesen, aber dachte man könnte evtl. auch mal zu Testzwecken einen Minimal-Hook ohne MMF (allg.
IPC) zum laufen bekommen...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."