zoukankan      html  css  js  c++  java
  • 程序的开机关机重启,开机启动,休眠功能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('SoftwareMicrosoftWindowsCurrentVersionRun',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

  • 相关阅读:
    Ajax原理实现
    EDP项目结构规范心得
    “引用的账户当前已锁定,切无法登录“问题解决方案
    实现文字背景不透明
    CSShack
    垂直居中重要方法理解---重点是方法三
    计算机为什么要区别C盘,D盘,E盘等?
    javascript典型实例
    centos7 安装telent和telnet-server
    使用xmanager连接linux服务器安装oracle数据库
  • 原文地址:https://www.cnblogs.com/findumars/p/6711268.html
Copyright © 2011-2022 走看看