次第的开机关机重启,开机运维,休眠功效delphi完成(使用AdjustTokenPrivileges提高权限)

 TShutDownStatus = (sdShutDown,sdReboot,sdLogOff,sdPowerOff);

 procedure ShutDown(sdStatus : TShutDownStatus);

  var
     NewState:       TTokenPrivileges;
     lpLuid:         Int64;
     ReturnLength:   DWord;
     ToKenHandle:    Cardinal;
  begin
     OpenProcessToken(GetCurrentProcess,
                   TOKEN_ADJUST_PRIVILEGES
                   OR TOKEN_ALL_ACCESS
                   OR STANDARD_RIGHTS_REQUIRED
                   OR TOKEN_QUERY,ToKenHandle);
     LookupPrivilegeValue(nil,’SeShutdownPrivilege’,lpLuid);
     NewState.PrivilegeCount:=1;
     NewState.Privileges[0].Luid:=lpLuid;
     NewState.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
     ReturnLength:=0;
   
 AdjustTokenPrivileges(ToKenHandle,False,NewState,0,nil,ReturnLength);
    case sdStatus of
      sdShutDown: ExitWindowsEx(EWX_SHUTDOWN OR EWX_POWEROFF or
EWX_FORCE,0);
      sdReboot: ExitWindowsEx(EWX_REBOOT OR EWX_POWEROFF or
EWX_FORCE,0);
      sdLogOff:ExitWindowsEx(EWX_LOGOFF,0);
      sdPowerOff:SetSystemPowerState(False,True);
      end;

  end;

  {
    函数成效:完毕系统睡眠休眠效能
    bHibernate : True 睡眠  False 休眠
  } 

procedure TEpComOper.SystemSleep(bHibernate:Boolean);
  var
    h_Module : THandle;
    pSetSuspendState :
function(hibernate,ForceCritical,DisableWakeEvent:Boolean):Boolean;
  begin
    h_Module := LoadLibrary(‘PowrProf.dll’);
    if h_Module <>0 then
    begin
      pSetSuspendState := GetProcAddress(h_Module,’SetSuspendState’);
      if @pSetSuspendState<>nil then
      begin
        pSetSuspendState(bHibernate,False,False);
      end;
      FreeLibrary(h_Module);
    end;
  end;

 

{设置撤废程序的开机运转功效}
  procedure TEpComOper.SetAppAutoRun(bRun : Boolean);
  var
    Reg:TRegistry;
  begin
    Reg := TRegistry.Create;
    try
      Reg.RootKey := HKEY_LOCAL_MACHINE;
     
Reg.OpenKey(‘Software\Microsoft\Windows\CurrentVersion\Run’,True);
      if bRun then
        Reg.WriteString(‘test’,Application.ExeName)
      else
        Reg.DeleteValue(‘test’);
      Reg.CloseKey;
    finally
      Reg.Free;
    end;
  end;

 

http://blog.csdn.net/zang141588761/article/details/51859129

相关文章