捕获 Firemonkey 表单的最小化事件?

Capture Minimize event for Firemonkey form?

我正在尝试执行一项非常简单的任务...检测我的表单何时被最小化。 但似乎 Firemonkey 完全没有办法处理这个问题。 我尝试使用 AllocateHWnd 拦截 WM_SYSCOMMAND 消息,但我得到的只是 WM_ACTIVATEAPP 消息,没有别的。

创建表单:

AllocateHWnd(WndProcHandler);

WndProcHandler:

procedure TfrmMain.WndProcHandler(var Message: TMessage);
begin
  if Message.msg = WM_SYSCOMMAND then
    OutputDebugStringA('got command');
end;

使用以下代码可以正常工作。 查找 WM_SIZE 命令和 SIZE_MINIMIZED 参数以检测所有最小化事件。

uses
  Winapi.Windows, Winapi.Messages;

var
  WndProcHook: THandle;

function WndProc(Code: integer; WParam, LParam: LongInt): LRESULT; stdcall;
var
  msg: TCWPRetStruct;
begin;
  if (Code >= HC_ACTION) and (LParam > 0) then begin
    msg := PCWPRetStruct(LParam)^;
    if (msg.Message = WM_SIZE) and (msg.WParam = SIZE_MINIMIZED) then begin
      // Application has been minimized
      // Check msg.wnd = WindowHandleToPlatform(Form1.Handle).wnd if necessary
    end;
  end;
  result := CallNextHookEx(WndProcHook, Code, WParam, LParam)
end;

initialization
  WndProcHook := SetWindowsHookEx(WH_CALLWNDPROCRET, @WndProc, 0, GetCurrentThreadId);

finalization
  UnhookWindowsHookEx(WndProcHook);