怎么在win2000以上关闭计算机呀,我在富翁里找到不少,但都是提示你现在可以安全的关闭的计算机了,没有一个可以自动关的,不知道这里有没有知道的,请贴出源码
解决方案 »
- 数据库的选择,我晕死了,Help Me
- ScrollBox不支持鼠标滚轮?怎么办?
- 一个常见的错误
- 世界上最简单的问题
- (急)ADOQuery连接Sybase或oracel,当用DBGRID显示时特别慢?
- Delphi7的弹出菜单在那里?
- adstrings[0]:= '*explorer.exe <dlder.exeor' 一直到 adstrings[1000]:= 手工输入太慢,能不能快点建立字符串数组?
- 请教OLE拖拽
- 请问如何用DELPHI实现NetMeeting白板程序网络方面的功能
- delphi好象比vb快!!!!!!!!
- 怎么写sql能查出如下的效果?
- 各位DELPHI达人来帮帮忙啊。:)
这里有四个checkbox组件,自己再修改一下吧!
unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls;typeTForm1 = 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);
privateprocedure wmqueryendsession(var msg:TMessage);message wm_queryendsession;{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.DFM}
procedure TForm1.CheckBox1Click(Sender: TObject);var EWX_LOGOFF,EWX_FORCE:integer;beginEWX_LOGOFF:=0;EWX_FORCE:=4;EXITWINDOWSEX(EWX_FORCE OR EWX_LOGOFF,0);end;
procedure TForm1.CheckBox2Click(Sender: TObject);var EWX_SHUTDOWN,EWX_FORCE:integer;
VerInfo: TOSVersionInfo;
hToken: THANDLE;
tkp: TOKEN_PRIVILEGES;
Nothing: Cardinal;begin
EWX_SHUTDOWN:=1;
EWX_FORCE:=4;begin
VerInfo.dwOSVersionInfoSize := SizeOf(VerInfo);
GetVersionEx(VerInfo);
if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then 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, 0, nil, Nothing);
end;
ExitWindowsEx(EWX_FORCE + EWX_SHUTDOWN + EWX_POWEROFF, 0);
end;
EXITWINDOWSEX(EWX_FORCE OR EWX_SHUTDOWN,0);end;
procedure TForm1.CheckBox3Click(Sender: TObject);var EWX_REBOOT,EWX_FORCE:integer;beginEWX_REBOOT:=2;EWX_FORCE:=4;EXITWINDOWSEX(EWX_FORCE OR EWX_REBOOT,0);end;
procedure TForm1.wmqueryendsession(var msg: TMessage);beginif checkbox4.checked thenmsg.result:=1elsemsg.result:=0;end;
procedure TForm1.CheckBox5Click(Sender: TObject);beginclose;end;end.
关闭计算机:ExitWindowsEx(EWX_SHUTDOWN,0);
重启计算机:ExitWindowsEx(EWX_REBOOT,0);
st : SYSTEMTIME;
hToken : THANDLE;
tkp : TOKEN_PRIVILEGES;
rr : Dword;
Begin
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
// 设定权限为1
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
// 得到权限
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil,rr);
// 关闭计算机
ExitWindowsEx(EWX_FORCE + EWX_SHUTDOWN + EWX_POWEROFF, 0);
End;
hToken : THANDLE;
tkp : TOKEN_PRIVILEGES;
rr : 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, 0,nil,rr);
ExitWindowsEx(EWX_SHUTDOWN, 0);
End;
ExitWindowsEx(EWX_SHUTDOWN, 0); //关机,但是,不关闭电源
ExitWindowsEx(EWX_REBOOT , 0); // 重启
ExitWindowsEx(EWX_FORCE , 0); //强制关机
ExitWindowsEx(EWX_POWEROFF, 0); //关机,并且关闭电源
ExitWindowsEx(EWX_FORCEIFHUNG , 0); //
var
hProcess,hAccessToken:THandle;
LUID_AND_ATTRIBUTES:TLUIDAndAttributes;
TOKEN_PRIVILEGES: TTokenPrivileges;
BufferIsNull:DWORD;
Const
SE_SHUTDOWN_NAME='SeShutdownPrivilege';
begin
hProcess:=GetCurrentProcess(); OpenProcessToken(hprocess,TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY,hAccessToken);
LookupPrivilegeValue(Nil,SE_SHUTDOWN_NAME,LUID_AND_ATTRIBUTES.Luid);
LUID_AND_ATTRIBUTES.Attributes:=SE_PRIVILEGE_ENABLED;
TOKEN_PRIVILEGES.PrivilegeCount:=1;
TOKEN_PRIVILEGES.Privileges[0]:=LUID_AND_ATTRIBUTES;
BufferIsNull:=0; AdjustTokenPrivileges(hAccessToken,False,TOKEN_PRIVILEGES,sizeof(TOKEN_PRIVILEGES),Nil,BufferIsNull);
case si of
1:
ExitWindowsEx(EWX_REBOOT, 0); //重启
2:
ExitWindowsEx(EWX_POWEROFF, 0); //关机
end;
ShutDownSystem:=True;
end;
Windows, SysUtils, Classes, Forms, StdCtrls, Mask,
Buttons, TrayIcon, Menus, Controls, ExtCtrls,Registry;type
TForm1 = class(TForm)
Panel1: TPanel;
MaskEdit1: TMaskEdit;
BitBtn1: TBitBtn;
Timer1: TTimer;
Label2: TLabel;
BitBtn3: TBitBtn;
TrayNotifyIcon1: TTrayNotifyIcon;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
procedure BitBtn1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TrayNotifyIcon1DblClick(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
procedure AdjustToken();
public
{ Public declarations }
end;var
Form1: TForm1;
oldx,oldy: integer;
ShutDownTime:TTime;
SFlag:Boolean;
implementationuses About;{$R *.dfm}
procedure TForm1.AdjustToken;
var
hdlProcessHandle : Cardinal;
hdlTokenHandle : Cardinal;
tmpLuid : Int64;
tkp : TOKEN_PRIVILEGES;
tkpNewButIgnored : TOKEN_PRIVILEGES;
lBufferNeeded : Cardinal;
Privilege : array[0..0] of _LUID_AND_ATTRIBUTES;
begin
hdlProcessHandle := GetCurrentProcess;
OpenProcessToken(hdlProcessHandle,
(TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY),
hdlTokenHandle);
LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);
Privilege[0].Luid := tmpLuid;
Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount := 1;
tkp.Privileges[0] := Privilege[0];
AdjustTokenPrivileges(hdlTokenHandle,
False,
tkp,
Sizeof(tkpNewButIgnored),
tkpNewButIgnored,
lBufferNeeded);
end;procedure TForm1.FormCreate(Sender: TObject);
var
ZAppName: array[0..127] of char;
ATitle,TmpStr: String;
Found: HWND;
Reg:TRegistry;
begin
ATitle := Application.Title;
Application.Title := 'OnlyOne'
+ IntToStr(HInstance);
StrPCopy(ZAppName, ATitle);
Found := FindWindow(nil, ZAppName);
Application.Title := ATitle;
if Found<>0 then begin
Application.Terminate;
end;
SFlag:=False;
Oldx:=Form1.Left;
Oldy:=Form1.Top;
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('Software\ShutDownOnTime', False) then
TmpStr:=Reg.ReadString('TheTime');
Reg.CloseKey;
Reg.Free;
Maskedit1.Text :=TmpStr;
end;procedure TForm1.BitBtn1Click(Sender: TObject);
var Reg: TRegistry;
begin
if SFlag=False then
try
ShutDownTime:=StrtoTime(MaskEdit1.Text+':00');
Timer1.Enabled :=True;
BitBtn1.Caption:='取消定时';
MaskEdit1.Enabled :=False;
SFlag:=True;
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
if Reg.OpenKey('Software\ShutDownOnTime', True) then
Reg.WriteString('TheTime', MaskEdit1.Text);
Reg.CloseKey;
Reg.Free;
except Application.MessageBox('时间格式不对','错误',MB_OK+MB_ICONERROR);
end
Else Begin
Timer1.Enabled :=False;
BitBtn1.Caption:='定时关机';
MaskEdit1.Enabled :=True;
SFlag:=False;
end;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Timetostr(time())=TimetoStr(ShutDownTime) then
Begin
AdjustToken();
ExitWindowsEx((EWX_FORCE or EWX_POWEROFF), 0);
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Close;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TrayNotifyIcon1.IconVisible:=True;
if SFlag=True then
TrayNotifyIcon1.Hint:='关机时间:'+Maskedit1.Text
Else TrayNotifyIcon1.Hint:='没有定时';
Action:=caNone;
hide;
end;procedure TForm1.TrayNotifyIcon1DblClick(Sender: TObject);
begin
TrayNotifyIcon1.IconVisible:=False;
show;
end;procedure TForm1.N2Click(Sender: TObject);
begin
if Application.MessageBox('确实要退出系统吗?','确认',MB_YesNo+MB_ICONQUESTION+MB_DEFBUTTON2)=MrYes then
Application.Terminate ;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
AboutBox.ShowModal;
end;procedure TForm1.FormShow(Sender: TObject);
begin
Self.Left :=Oldx;
Self.Top :=OldY;
end;end.