Firemonkey表单捕获最小化事件?

时间:2016-01-26 13:30:37

标签: windows delphi firemonkey delphi-xe8

我正在尝试执行一项非常简单的任务...检测我的表单何时被最小化。 但似乎Firemonkey绝对无法处理这个问题。 我尝试使用AllocateHWnd拦截WM_SYSCOMMAND条消息,但我得到的只是WM_ACTIVATEAPP条消息,而不是其他内容。

的CreateForm:

AllocateHWnd(WndProcHandler);

WndProcHandler:

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

1 个答案:

答案 0 :(得分:1)

使用以下代码。 查找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);