2013-03-25 21 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實現這個想法。]