delphi xe5 重启 关闭 windows 8  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi xe5 重启 关闭 windows 8


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
推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.076595067977905 seconds