unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Registry;
type
TForm3 = class(TForm)
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
procedure QueryEndSession(var Msg:TMessage);
Message WM_QueryEndSession;
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
i:Integer;
implementation
{$R *.dfm}
procedure TForm3.QueryEndSession(var Msg: TMessage);
var j:Integer;
begin
j:=1;
if j<>i then
begin
Form3.Visible:=true;
Memo1.ScrollBars:=ssBoth;
Memo1.Lines.LoadFromFile('d:/e.txt');
Msg.Result:=0;
end
else
Msg.Result:=1;
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
Form3.Hide;
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
i:=1;
WinExec('shutdown -s -t 0', sw_Show);
end;
procedure TForm3.FormCreate(Sender: TObject);
var
reg:TRegistry;
{
var
hToken:THandle;
Tkp:TTokenPrivileges;
zero:DWORD;
}
begin
{ OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
Tkp.PrivilegeCount :=1;
Tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,False,Tkp,SizeOf(TTokenPrivileges),nil,Zero);
}
i:=0;
Memo1.Lines.LoadFromFile('d:/d.txt');
reg:=tregistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('SOFTWARE/Microsoft/Windows/CurrentVersion/Run',true);
reg.WriteString('信息','C:/Documents and Settings/Administrator/My Documents/RAD Studio/Projects/yitutong.exe');
reg.CloseKey;
reg.Free;
end;
end.
注意 此程序用一个全局变量i的值, 来判断是否需要关机
如果i的值与j不同
则不关机
如果相同
则关机
所以我们可以在另一个事件中设置全局变量i的取值,然后将它与其它事件中的局部变量做比较,来控制选择分支
=====================
^^!!! 可惜源程序找不到了 DELPHI 也就学习了那几天 无法重新编译了 看看以后还有米有心情再调试吧