線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1421
推到 Plurk!
推到 Facebook!

軟體如何自己測試是被用Close關掉還是關機時關掉?

尚未結案
kirkcc
一般會員


發表:4
回覆:2
積分:1
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-26 21:54:28 IP:210.66.xxx.xxx 未訂閱
各位好, 我的程式想知道是被用右上角的X關閉還是關機時被關閉, 請問要如何分辨呢? 在 FormCloseQuery(TObject *Sender, bool &CanClose) 裡面要怎麼分辨 ?? 謝啦!
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-27 00:35:03 IP:218.19.xxx.xxx 未訂閱
kirkcc 您好:    FormCloseQuery() 可以攔截到程式本身的關閉動作,但是電腦關機的動作不是在此處攔截的,您必須攔截系統的 WM_QUERYENDSESSION 訊息,給您一個範例:
// 於 .h 檔案內:
void __fastcall MyWndProc(TMessage &Message);    // 於 .cpp 檔案內:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    WindowProc = MyWndProc; //攔截訊息
}    void __fastcall TForm1::MyWndProc(TMessage &Message)
{
    if(Message.Msg == WM_QUERYENDSESSION){
        .... 此處做您要做的動作 ....
    }        //將訊息還給 Form 原來處理程序,否則只是收到關閉指令,但不會真正執行關閉動作
    WndProc(Message);
}
kirkcc
一般會員


發表:4
回覆:2
積分:1
註冊:2003-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-27 01:04:30 IP:210.66.xxx.xxx 未訂閱
多謝... 你太強了... 再問一下 如果在 工作管理員 裡面點工作結束 , 那程式收到的 message 又是什麼呢? 再謝一次!!
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-27 01:41:24 IP:218.19.xxx.xxx 未訂閱
kirkcc 您好:    多謝您的恭維,不過我不太敢當,其實站上已經有相關的討論,只是恰好我已經寫過這樣的動作 (為了程式結束時能將組態存檔),所以我搶先了一步回覆而已,就算我沒看到本篇,也會有人提供相同的資訊供您參考的。    呵呵~看起來您是想要寫一支 "無法被終止" 的程式是嗎?告訴您一個不太好的消息,就我目前所知是無法達到這樣的目的,這裡有一篇文章或許能讓您及其他的看倌們瞭解 "為什麼"? Why can't you trap TerminateProcess? http://blogs.msdn.com/oldnewthing/archive/2004/07/22/191123.aspx 該文章裡有網友的相關討論,其中有人提到某些方式來處理或許可行,但也有人反駁該論點,我沒有實作過,不知其可行性到底如何?有興趣的話就去看一看吧。 發表人 - RedSnow 於 2005/05/27 02:11:55
系統時間:2024-05-07 10:17:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!