我正在尝试执行一项非常简单的任务...检测我的表单何时被最小化。
但似乎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;
答案 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);