我如何区分终止我的程序的不同方式?

我正在使用C ++ Builder 2007编写Windows程序。

当我的程序closures时,根据closures的方式,它应该有不同的performance:

  1. 用户点击应用程序窗口的“X”:返回到应用程序的用户login。
  2. 程序通过TaskManager终止:然后在那里终止程序。 这一点特别重要,因为程序不能阻止Windowsclosures。

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

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

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

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

[以前,这个Q被贴上了Delphi的标签。 因此,我的答案的第一个版本包含了这个想法的Delphi实现。]