在軟件的安裝或演示操作等過程中,如果關閉Windows會產生嚴重的後果,就必須禁止用戶關閉Windows,直到完成相應的操作,那麼如何才能禁止用戶關閉Windows呢?其實很簡單,當用戶關閉Windows時,系統會發送給各應用程序一個消息WM_QUERYENDSESSION,告訴各應用程序要關機了,如果反饋回來的消息值為0,那麼Windows就不能關機。因此,截獲WM_QUERYENDSESSION,並反饋回0,大功就告成了,下面是一個例子。
在下面這個例子中,我們在窗體中加入一個復選框(TCheckBox),如果用戶不選中它,則無法關閉Windows,如果選中它,才可以關閉。在實際應用中,用戶可首先設定一個布爾變量,當所需的作操都完成後,使其值變化,當程序檢測到這個變量的值變化後才允許關閉Windows。為方便大家使用,給出窗體的完整代碼(很短):
在.hpp中的Private段內加入以下代碼:
//截獲 WM_QUERYENDSESSION 消息。
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_QUERYENDSESSION,TMessage,OnWMQueryEndSession)
END_MESSAGE_MAP(TForm);
void __fastcall TForm1::OnWMQueryEndSession(TMessage &Message);
在.cpp中添加以下代碼:
void __fastcall TForm1::OnWMQueryEndSession(TMessage &Message)
{
//如果CheckBox被選中,允許關機。
if(CheckBox1->Checked)
Message.Result=1;
else
Message.Result=0;
}
----運行上面的程序,首先不要選中復選框,在Windows的“開始”菜單中選擇“關閉系統-->關閉計算機或重新啟動計算機”,你將發現屏幕閃爍了一下又恢復了正常;將復選框選中,再關閉計算機,這下就可如願了。
----程序調試環境:C++ Builder 6.0 + sp3
Windows 2000 ADV Server + sp3