• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab 向量操作作业发布时间:2022-07-18
下一篇:
MATLAB矩阵运算 - chloe_zhou发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap