很多资料上说要重启或关闭电脑可以使用ExitWindowsEx()这个API函数,可我用ExitWindowsExExit(ewx_logoff,0)能注销系统,但用WindowsExExit(ewx_reboot,0)和WindowsEx(ewx_shutdown,0)想重启和关闭电脑,都没有任何反应,在vb里有个要先获得某个权限的问题,不知道Delphi里要怎么样才能实现重启和关闭计算机,望赐教!多谢了!

解决方案 »

  1.   

    ExitWindowsEx()好象在98和xp下好用,在2000下不好用,我有一个关机程序,可是重启我没做过;
    procedure ShutDown;
    var
      hProcess, hToken, lBufferNeeded: Cardinal;
      tmpLuid: TLargeInteger;
      tkp, tkp1: TOKEN_PRIVILEGES;
    begin
      hProcess := GetCurrentProcess;
      OpenProcessToken(hProcess, (TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY), hToken);
      LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);
      tkp.PrivilegeCount := 1;
      tkp.Privileges[0].Luid := tmpLuid;
      tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
      AdjustTokenPrivileges(hToken, False, tkp, sizeof(tkp1), tkp1, lBufferNeeded);
      ExitWindowsEx(EWX_POWEROFF + EWX_FORCE, 0);
    end;
      

  2.   

    确实,在winnt下调用关机行数前必须得到权限。用chenshu19791003(述述) 的程序应该可以,至于关机,重启,注销等只是传递不同的参数而已。