怎么在win2000以上关闭计算机? 怎么在win2000以上关闭计算机呀,我在富翁里找到不少,但都是提示你现在可以安全的关闭的计算机了,没有一个可以自动关的,不知道这里有没有知道的,请贴出源码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你的电脑配置比较新的话就可以用的:),记得给分哦:D这里有四个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;beginEWX_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. 使用WindowsAPI函数呀! 关闭计算机:ExitWindowsEx(EWX_SHUTDOWN,0); 重启计算机:ExitWindowsEx(EWX_REBOOT,0); 2000里面是需要得到权限才能关机的,jog81的代码正确 Var 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; 在win2000里是不是必需强制关闭才行? Var 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_LOGOFF , 0); //注销ExitWindowsEx(EWX_SHUTDOWN, 0); //关机,但是,不关闭电源ExitWindowsEx(EWX_REBOOT , 0); // 重启ExitWindowsEx(EWX_FORCE , 0); //强制关机ExitWindowsEx(EWX_POWEROFF, 0); //关机,并且关闭电源ExitWindowsEx(EWX_FORCEIFHUNG , 0); // 用我的函数,在2000下肯定行,经过无数次测试了!function TFrmMain.ShutDownSystem(si:integer):BOOL;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; unit main;interfaceuses 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;beginif SFlag=False thentry 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);endElse Begin Timer1.Enabled :=False; BitBtn1.Caption:='定时关机'; MaskEdit1.Enabled :=True; SFlag:=False;end;end;procedure TForm1.Timer1Timer(Sender: TObject);beginif Timetostr(time())=TimetoStr(ShutDownTime) thenBegin AdjustToken(); ExitWindowsEx((EWX_FORCE or EWX_POWEROFF), 0);end;end;procedure TForm1.BitBtn3Click(Sender: TObject);beginClose;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);beginTrayNotifyIcon1.IconVisible:=True;if SFlag=True thenTrayNotifyIcon1.Hint:='关机时间:'+Maskedit1.TextElse TrayNotifyIcon1.Hint:='没有定时';Action:=caNone;hide;end;procedure TForm1.TrayNotifyIcon1DblClick(Sender: TObject);beginTrayNotifyIcon1.IconVisible:=False;show;end;procedure TForm1.N2Click(Sender: TObject);beginif Application.MessageBox('确实要退出系统吗?','确认',MB_YesNo+MB_ICONQUESTION+MB_DEFBUTTON2)=MrYes then Application.Terminate ;end;procedure TForm1.N3Click(Sender: TObject);beginAboutBox.ShowModal;end;procedure TForm1.FormShow(Sender: TObject);beginSelf.Left :=Oldx;Self.Top :=OldY;end;end. 如何改变IP地址 有人用过midioutopen等midi的Api吗??请进 高难题,如何改变 EXE 文件的建立时间? 时间类型转换问题 该使何种类型的字符串? 请问delphi中和ORACLE的连接问题 IDHTTP 网站登陆:GET提交 提交参数正常 但返回结果错误 一直登陆失败 求高手指点,,, delphi 函数不执行 请问,一个有关TstringGrid控件的问题? 我应该用什么类型??? 怎么写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.