2013-03-25 36 views
0

我编码的Windows程序,使用C++ Builder的2007年如何区分终止我的程序的不同方式?

当我的程序关闭,它应该表现不同,这取决于它如何被关闭:

  1. 用户点击了应用程序窗口的'X':返回到应用程序的用户登录名。
  2. 程序通过TaskManager终止:然后终止程序。这一点特别重要,因为程序不能阻止Windows关闭。

获取一个或另一个很容易:实现一个TForm::OnClose()OnCloseQuery()来处理事件。但是,两者都没有告诉我是什么导致了这件事。还有另外一种方法可以知道究竟是什么导致了关闭事件?

+1

从['这篇文章'](http://stackoverflow.com/a/10745981/960757)你应该阅读你的答案。 – TLama 2013-03-25 16:08:13

+1

C++ Builder2007!= Delphi – 2013-03-25 16:43:01

+1

任务管理器提供了两种停止程序的方法。一种是在应用程序选项卡上选择一个任务,然后选择“结束任务”;另一个是从流程标签中选择一个项目并选择“结束流程”。根本无法检测到后者。 – 2013-03-25 16:47:45

回答

1

您可以让您的主表格输入WM_SYSCOMMAND消息。如果您收到此消息的命令类型为SC_CLOSE,那么您知道用户已经单击了关闭按钮,按下了Alt + F4或从系统菜单中选择了“关闭”。然后你可以做任何你喜欢的事情(而不是让默认操作关闭表单)。

例如,您可以再次显示登录对话框。

这不会影响关闭主窗体/应用程序的其他方式,所以您仍然可以从任务管理器中的(第一个选项卡)关闭应用程序。

[此前,这个Q被标记为德尔福。因此,我的答案的第一个版本包含Delphi实现这个想法。]