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

  • 相关阅读:
    Gothic Revival Portal
    通过CRM API for 3CXPhone与其他应用进行对接
    Asp.net Identity 2.0 作弊条
    ReportViewer作弊条
    定制与扩展Asp.NET 5 MVC内建身份验证机制
    在Dynamics CRM 2015中通过3CX插件(以及3CX windows phone)拨出电话
    在Asp.net MVC中使用Authorization Manager (AzMan)进行Windows用户身份认证
    log4net资料收集
    jQuery 插件开发文章收集
    git &github 快速入门
  • 原文地址:https://www.cnblogs.com/findumars/p/6711268.html
Copyright © 2011-2022 走看看