diff --git a/delphi-backend/UMainForm.pas b/delphi-backend/UMainForm.pas index ce171b1..1459258 100644 --- a/delphi-backend/UMainForm.pas +++ b/delphi-backend/UMainForm.pas @@ -213,6 +213,8 @@ begin FWinEventHook := SetWinEventHook( EVENT_SYSTEM_MINIMIZESTART, EVENT_SYSTEM_MINIMIZEEND, 0, @WinStateEventProc, GetCurrentProcessId, 0, WINEVENT_OUTOFCONTEXT); + LogLine('[winstate] minimise hook installed=' + + BoolToStr(FWinEventHook <> 0, True)); FRestoring := False; OnResize := FormResizeTrackState; @@ -1561,7 +1563,13 @@ procedure WinStateEventProc(hWinEventHook: THandle; AEvent: DWORD; AWnd: HWND; idObject, idChild: LongInt; idEventThread, dwmsEventTime: DWORD); stdcall; begin if (idObject <> OBJID_WINDOW) or (AWnd = 0) or (MainForm = nil) then Exit; - if AWnd <> WindowHandleToPlatform(MainForm.Handle).Wnd then Exit; + // No HWND filter: an FMX app owns TWO top-level windows — the form and the + // taskbar proxy (see FindFMXAppWindow in PM.Bridge) — and Win+D minimises + // the proxy, which an equality test against the form handle rejected. The + // hook is already scoped to our own process, and WebView2 lives in separate + // processes, so anything arriving here is ours. + MainForm.LogLine(Format('[winstate] hook event=%d hwnd=%d form=%d', + [AEvent, AWnd, WindowHandleToPlatform(MainForm.Handle).Wnd])); if AEvent = EVENT_SYSTEM_MINIMIZESTART then MainForm.WinStateMinimizeStart else if AEvent = EVENT_SYSTEM_MINIMIZEEND then MainForm.WinStateMinimizeEnd; end;