可以使用以下代码实现在指定时间自动关机:

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;

这样就可以实现定时关机功能了。

怎么实现定时关机用delphi实现

原文地址: http://www.cveoy.top/t/topic/bgHv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录