軟體如何自己測試是被用Close關掉還是關機時關掉? |
尚未結案
|
kirkcc
一般會員 發表:4 回覆:2 積分:1 註冊:2003-06-11 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
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 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
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
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |