Zitat:
Wenn man etwas hat, was sich dort rein hängt, dann muß man eben auch auf dessen Events reagieren.
Ich verwende nichts was sich dort reinhängt.
Habe es jetzt so geändert. Ob das elegant ist mag dahin gestellt sein.
Delphi-Quellcode:
procedure WinEventProc(hWinEventHook: THandle; event: DWORD; EHandle: HWND;
idObject: Integer; idChild: Integer; idEventThread: DWord;
dwmsEventTime: DWord); stdcall;
var
Counter: Integer;
begin
if (event = EVENT_OBJECT_DESTROY) and (EHandle = HwndTarget) and
(idObject = OBJID_WINDOW) and (idChild = INDEXID_CONTAINER) then
begin
if (MainApp.FHNotifyRBin <> 0) then
begin
HwndTarget := 0;
Counter := 0;
if SHChangeNotifyDeregister(MainHandle) then
begin
MainApp.FHNotifyRBin := 0;
repeat
HwndTarget := FindWindow('Progman', 'Program Manager');
WinProcessMessages;
inc(Counter);
until (HwndTarget <> 0) or (Counter = 30000);
if HwndTarget <> 0 then
MainApp.RegisterRecyleBin(MainHandle);
end;
end;
end;
end;