本文整理自网络,侵删。
procedure TFmain.RebootOrShutDownSystem(bz: Byte);
var
osVerInfo: TOSVersionInfo;
rl: Cardinal;
hToken: THandle;
tkp: TOKEN_PRIVILEGES;
begin
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(osVerInfo) then
case osVerInfo.dwPlatformId of
VER_PLATFORM_WIN32_NT: // Windows NT/2000/XP
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY, hToken);
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);
end;
case bz of
0: ExitWindowsEx(EWX_SHUTDOWN + EWX_FORCE + EWX_POWEROFF, 0); //关闭计算机
1: ExitWindowsEx(EWX_REBOOT, $FFFF); // 重启
end;
end;
VER_PLATFORM_WIN32_WINDOWS: // Windows 95/98/98SE/Me
case bz of
0: ExitWindowsEx(EWX_SHUTDOWN + EWX_FORCE + EWX_POWEROFF, 0); //关闭计算机
1: ExitWindowsEx(EWX_REBOOT, $FFFF); // 重启
end;
end;//case
end;//if
end;
调用 :
procedure TForm1.X1Click(Sender: TObject);
begin
if MessageBox(0, '你要重启计算机吗?', '警告', MB_ICONQUESTION or MB_YESNO) = idyes then
begin
RebootOrShutDownSystem;
end;
application.Terminate;
end;
//该代码片段来自于: http://www.sharejs.com/codes/delphi/6751
相关阅读 >>
Delphi strtodatetime 这个函数在win7下出错
Delphi d10.x 安卓app开发中按返回键后程序不退出程序的方法
更多相关阅读请进入《Delphi》频道 >>