怎么设定让win2000在一定时间后自己关机(50分)

S

sqcool

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么设定让win2000在一定时间后自己关机。
如:我离开了电脑,但希望它在2个小时候后,自己关机。
 
自己编写一个服务吧。
检测计算机空闲达设定时间后就关机。
 
你设置2小时后休眠多好,和关机一样,下次启动还快。
 
将"c:/windows/rundll32.exe user.exe,exitwindows"加入计划任务就行
 
这是以为仁兄写的win2000的关机程序,你把他的该一下就可以了
win2000和nt的关机机制和win98不一样
必须调用AdjustTokenPrivileges使se_shutdown_name有效
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
proceduredo
Shutdown;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
logoff: boolean = false;
reboot: boolean = false;
warn: boolean = false;
do
wnQuick: boolean = false;
cancelShutdown: boolean = false;
powerOff: boolean = false;
timeDelay: integer = 0;

implementation
{$R *.DFM}
function HasParam(Opt: Char): Boolean;
var
x: integer;
begin

result := false;
for x := 1 to paramCountdo

if (paramstr(x) = '-'+opt) or (paramstr(x) = '/'+opt) then
result := true;
end;

function GetErrorString: String;
var
lz: Cardinal;
err: array[0..512] of Char;
begin

lz := GetLastError;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, lz, 0, @err, 512, nil);
result := string(err);
end;

procedure Tform1.DoShutdown;
var
rl,flgs: Cardinal;
hToken: Cardinal;
tkp: TOKEN_PRIVILEGES;
begin

flgs := 0;
ifdo
wnQuick then
flgs := flgs or EWX_FORCE;
if not reboot then
flgs := flgs or EWX_SHUTDOWN;
if reboot then
flgs := flgs or EWX_REBOOT;
if poweroff and (not reboot) then
flgs := flgs or EWX_POWEROFF;
if logoff then
flgs := (flgs and (not (EWX_REBOOT or EWX_SHUTDOWN or EWX_POWEROFF))) or EWX_LOGOFF;
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin

if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then

memo1.lines.add('Cannot open process token. ['+GetErrorString+']')
else
begin
if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then
begin

tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount := 1;
AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
if GetLastError <> ERROR_SUCCESS then

memo1.lines.add('Error adjusting process privileges.');
end else
memo1.lines.add('Cannot find privilege value. ['+GetErrorString+']');
end;
if CancelShutdown then
if AbortSystemShutdown(nil) = False then

memo1.lines.add('Cannot abort. [/'+GetErrorString+'/]')
else

memo1.lines.add('Cancelled./')
else
begin

if InitiateSystemShutdown(nil, nil, timeDelay,do
wnQuick, Reboot) = False then
memo1.lines.add('Cannot godo
wn. [/'+GetErrorString+'/]')
else

memo1.lines.add('Shuttingdo
wn!/');
end;
end
else
begin
ExitWindowsEx(flgs, 0);
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.add('Shutdown v0.3 for Win32 (similar to the Linux version)');
memo1.lines.add('(c) 2000 NeuralAbyss Software. All Rights Reserved.');
if HasParam('?') or (ParamCount=0) then
begin
memo1.lines.add('Usage: shutdown [-akrhfnc] [-t secs]');
memo1.lines.add(' -k: do
n''t really shutdown, only warn.');
memo1.lines.add(' -r: reboot after shutdown.');
memo1.lines.add(' -h: halt after shutdown.');
memo1.lines.add(' -p: power off after shutdown');
memo1.lines.add(' -l: log off only');
memo1.lines.add(' -n: kill apps thatdo
n''t want to die.');
memo1.lines.add(' -c: cancel a running shutdown.');
end else
begin
if HasParam('k') then
warn := true;
if HasParam('r') then
reboot := true;
if HasParam('h') and reboot then
begin
memo1.lines.add('Error: Cannot specify -r and -h parameters together!');
Exit;
end;
if HasParam('h') then
reboot := false;
if HasParam('n') then
do
wnQuick := true;
if HasParam('c') then
cancelShutdown := true;
if HasParam('p') then
powerOff := true;
if HasParam('l') then
logoff := true;
do
Shutdown;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
reboot := true;
do
Shutdown;
end;
end.
 
不知道模仿点那个Power键可以吗?
 
多人接受答案了。
 
很热心啊。不过我是菜鸟。
 

Similar threads

顶部 底部