因为服务器是放在办公室的某一个角落里,所以晚上办公室没人值班时,其它部门、车间还要用到服务器,所以不能早早的关服务器,晚上22:30后才能关机。设置了一下2003系统自带的关机程序,不方便,所以自己开发了定时关机小软件,开发平台是DELPHI7,此小软件在WINXP、WIN2000、WIN2003下测试通过。现把源代码公布如下:供各位初学者参考,如有不足之处,望指正。
一、程序代码:
unit Ushutdown;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons;
type
TShutdownFrm = class(TForm)
Timer1: TTimer;
Panel1: TPanel;
BitBtn1: TBitBtn;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
tm: String;
{ Public declarations }
end;
var
ShutdownFrm: TShutdownFrm;
implementation
{$R *.dfm}
function ShutDownSystem(uFlags: Cardinal):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);
ExitWindowsEX(EWX_SHUTDOWN,0);//关机
{ ExitWindowsEx(EWX_LOGOFF,0);//选注销
ExitWindowsEx(EWX_REBOOT,0); //重启 }
ShutDownSystem:=True;
end;
procedure TShutdownFrm.Timer1Timer(Sender: TObject);
begin
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,0,NIL,0);//禁止屏保执行
if timetostr(now)=tm+':00' then
ShutDownSystem(EWX_POWEROFF+EWX_FORCE);
end;
procedure TShutdownFrm.BitBtn1Click(Sender: TObject);
begin
if Edit1.Text<>'' then
begin
tm := trim(Edit1.Text);
Timer1.Enabled := True;
Timer1.Interval := 500;// interval是设置时间间隔:设置Interval属性,单位是毫秒mm,1000即为1秒。
end
else
begin
showmessage('关机时间不能为空!');
end;
end;
end.
二、绿色软件,不用安装,软件下载地址: