程序的开机关机重启,开机启动,休眠功能delphi实现(使用AdjustTokenPrivileges提升权限)

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序的开机关机重启,开机启动,休眠功能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

以上是关于程序的开机关机重启,开机启动,休眠功能delphi实现(使用AdjustTokenPrivileges提升权限)的主要内容,如果未能解决你的问题,请参考以下文章

win10开机自动打开上次程序

ubuntu重启卡住。。。

Linux,debian.重启 开机保存上次的桌面窗口

WIN10的电脑 自己开机了为啥

电脑开机停在please wait一直重启

“重启手机”和“关机再开机”有何区别?