怎么实现定时关机用delphi实现
可以使用以下代码实现在指定时间自动关机:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
procedure TForm1.Button1Click(Sender: TObject);
var
hToken: THandle;
tkp: TOKEN_PRIVILEGES;
suInfo: TStartupInfo;
pInfo: TProcessInformation;
begin
// 获取当前进程令牌句柄
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
// 获取关机特权
LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
// 提升进程权限
AdjustTokenPrivileges(hToken, False, tkp, 0, nil, nil);
// 关机
suInfo.cb := SizeOf(suInfo);
suInfo.dwFlags := STARTF_USESHOWWINDOW;
suInfo.wShowWindow := SW_SHOWNORMAL;
CreateProcess(nil, PChar('shutdown.exe /s /f /t 0'), nil, nil, False, 0, nil, nil, suInfo, pInfo);
CloseHandle(hToken);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
hour, minute, second: Word;
shutdownTime: TDateTime;
timeDiff: Integer;
begin
// 获取设定时间
hour := StrToInt(Edit1.Text);
minute := StrToInt(Edit2.Text);
second := 0;
shutdownTime := EncodeTime(hour, minute, second, 0);
// 计算时间差
timeDiff := Round((shutdownTime - Now) * 24 * 60 * 60 * 1000);
// 设置定时器
SetTimer(Handle, 1, timeDiff, nil);
ShowMessage('定时关机已设置');
end;
procedure TForm1.WMTimer(var Msg: TWMTimer);
begin
// 关闭定时器
KillTimer(Handle, 1);
// 关机
Button1Click(nil);
end;
在窗体上放置2个按钮和2个编辑框,按钮1用于立即关机,按钮2用于设置定时关机,编辑框1用于输入小时数,编辑框2用于输入分钟数。在窗体的代码部分,添加以下变量声明和消息响应过程:
private
{ Private declarations }
procedure WMTimer(var Msg: TWMTimer); message WM_TIMER;
public
{ Public declarations }
其中,WMTimer过程用于响应定时器消息,实现定时关机功能。最后,在窗体创建和关闭过程中,添加以下代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
// 初始化定时器
timeSetEvent(0, 0, nil, 0, TIME_PERIODIC);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// 停止定时器
timeKillEvent(0);
end;
这样就可以实现定时关机功能了。
原文地址: http://www.cveoy.top/t/topic/bgHv 著作权归作者所有。请勿转载和采集!