Mar*_*lka 4 windows delphi system-shutdown
我有一个应用程序隐藏在红十字会关闭.用户可以通过右键单击托盘图标并选择退出来退出.但它显然会阻止Windows关闭,所以我做了一个程序来响应WM_QUERYENDSESSION来启用关闭,这是相关的代码:
procedure TMainForm.OnWindowsEnd(var Msg: TMessage); // responds to message WM_QUERYENDSESSION;
begin
AllowClose:=true;
Close;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=AllowClose;
if NOt AllowClose then
Hide;
end;
Run Code Online (Sandbox Code Playgroud)
但奇怪的事情不断发生.当我发出关闭时,这个应用程序很好地关闭.但就是这样.当我发出第二次关机时,系统退出正常.(我在WinXP中测试这个).
可能是什么原因?谢谢
答案 代码应如下所示
procedure TMainForm.OnWindowsEnd(var Msg: TMessage); // responds to message WM_ENDSESSION;
begin
// Possible checking for flags, see http://msdn.microsoft.com/en-us/library/aa376889%28v=vs.85%29.aspx
AllowClose:=true;
Msg.Result:=1;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose:=AllowClose;
if NOt AllowClose then
Hide;
end;
Run Code Online (Sandbox Code Playgroud)
WM_QUERYENDSESSION是一个"查询",而不是一个关机命令:Windows询问你是否可以关闭,不要求你关闭.你不应该打电话Close!
其次,Windows希望您在处理该消息时返回TRUE,因此它知道您可能正常关机.我假设您没有将结果设置为TRUE,因此Windows会中止第一个关机请求.
| 归档时间: |
|
| 查看次数: |
1779 次 |
| 最近记录: |