用Delphi完成防范用戶關(guān)閉Window9X
發(fā)表時間:2024-02-17 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]----在軟件的安裝或演示操作等過程中,如果關(guān)閉WIN9X會產(chǎn)生嚴(yán)重的后果,就必須禁止用戶關(guān)閉WIN9X,直到完成相應(yīng)的操作,那么如何才能禁止用戶關(guān)閉WIN9X呢?其實(shí)很簡單,當(dāng)用戶關(guān)閉WIN9X時,系統(tǒng)會發(fā)送給各應(yīng)用程序一個消息wm_queryendsession,告訴各應(yīng)用程序要關(guān)機(jī)了,如果反...
----在軟件的安裝或演示操作等過程中,如果關(guān)閉WIN9X會產(chǎn)生嚴(yán)重的后果,就必須禁止用戶關(guān)閉WIN9X,直到完成相應(yīng)的操作,那么如何才能禁止用戶關(guān)閉WIN9X呢?其實(shí)很簡單,當(dāng)用戶關(guān)閉WIN9X時,系統(tǒng)會發(fā)送給各應(yīng)用程序一個消息wm_queryendsession,告訴各應(yīng)用程序要關(guān)機(jī)了,如果反饋回來的消息值為0,那么WIN9X就不能關(guān)機(jī)。因此,截獲wm_queryendsession,并反饋回0,大功就告成了,下面是一個例子。
----在下面這個例子中,我們在窗體中加入一個復(fù)選框(CHECKBOX),如果用戶不選中它,則無法關(guān)閉WIN9X,如果選中它,才可以關(guān)閉。在實(shí)際應(yīng)用中,用戶可首先設(shè)定一個布爾變量,當(dāng)所需的作操都完成后,使其值變化,當(dāng)程序檢測到這個變量的值變化后才允許關(guān)閉WIN9X。為方便大家使用,給出窗體的完整代碼(很短):
unitUnit1;
interface
uses
Windows,Messages,SysUtils,
Classes,Graphics,Controls,
Forms,Dialogs,StdCtrls;
type
TForm1=class(TForm)
CheckBox1:TCheckBox;
private
{Privatedeclarations}
//聲明攔截WM_QueryEndSession消息的過程
procedureWMQueryEndSession(varMsg:TMessage);
messageWM_QueryEndSession;
public
{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
{$R*.DFM}
procedureTForm1.WMQueryEndSession
(varMsg:TMessage);
begin
ifCheckBox1.CheckedthenMsg.Result:=1
elseMsg.Result:=0;
end;
end.
----運(yùn)行上面的程序,首先不要選中復(fù)選框,在WIN9X的“開始”菜單中選擇“關(guān)閉系統(tǒng)\關(guān)閉計(jì)算機(jī)或重新啟動計(jì)算機(jī)”,你將發(fā)現(xiàn)屏幕閃爍了一下又恢復(fù)了正常;將復(fù)選框選中,再關(guān)閉計(jì)算機(jī),這下就可如愿了。
----程序調(diào)試環(huán)境:DELPHI4,中文WIN98。