在实际应用时,修改了系统的某些设置,必须重新启动windows;而有些时候演示完
一个软件后,必须关闭windows;同时在演示期间,又禁止用户强行关闭windows.如何
解决上述问题,笔者编制了一个程序全面地解决了上述问题.
- 实现原理:
1.重新启动windows,关闭windows,结束当前的用户进程都是通过调用
exitwindowsex函数实现的.该函数有两个参数,前一个参数使用ewx_force表示
强行关闭windows而不提醒保存其他应用程序的运行结果,后一个参数ewx_logoff
表示注销当前的用户进程; ewx_shutdown表示关闭windows; ewx_reboot表示
重新启动windows.
2.禁止关闭windows是通过关闭windows98时,系统向各应用程序发送的一个
消息wm_queryendsession,通知各应用程序要关机了,如反馈回来的消息值为0,那么就不能
关闭windows98.
图1 - 应用实例:
- 建立含有如下控件的窗体:
控件 控件名 caption
窗体 form1 重新启动windows系统
复选框 checkbox1 强行结束当前的用户进程
复选框 checkbox2 强行关机
复选框 checkbox3 强行重新启动机器
复选框 checkbox4 禁止关机
复选框 checkbox5 退出
2.程序清单:
unit clsw;
interface
uses
windows, messages, sysutils, classes, graphics, controls, forms, dialogs,
stdctrls;
type
tform1 = class(tform)
checkbox1: tcheckbox;
checkbox2: tcheckbox;
checkbox3: tcheckbox;
checkbox4: tcheckbox;
checkbox5: tcheckbox;
procedure checkbox1click(sender: tobject);
procedure checkbox2click(sender: tobject);
procedure checkbox3click(sender: tobject);
procedure checkbox5click(sender: tobject);
private
procedure wmqueryendsession(var msg:tmessage);
message wm_queryendsession;
{ private declarations }
public
{ public declarations }
end;
var
form1: tform1;
implementation
{$r *.dfm}
procedure tform1.checkbox1click(sender: tobject);
var ewx_logoff,ewx_force:integer;
begin
ewx_logoff:=0;
ewx_force:=4;
exitwindowsex(ewx_force or ewx_logoff,0);
end;
procedure tform1.checkbox2click(sender: tobject);
var ewx_shutdown,ewx_force:integer;
begin
ewx_shutdown:=1;
ewx_force:=4;
exitwindowsex(ewx_force or ewx_shutdown,0);
end;
procedure tform1.checkbox3click(sender: tobject);