程序的开机关机重启,开机启动,休眠功能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

时间: 2024-10-08 04:51:03

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

C# 操作电脑 关机 重启 注销 休止 休眠

// 关机 强制电脑10秒之内关机 //System.Diagnostics.Process.Start("shutdown", "-s -f -t 10"); // 重启 强制电脑10秒之内关机//System.Diagnostics.Process.Start("shutdown", "-r -f -t 10"); // 注销 //System.Diagnostics.Process.Start("shutdow

使用本脚本可以自动批量完成中间节点环境的部署工作,包括:Nginx编译安装、添加程序管理脚本、设置开机启动、反向代理配置、证书分发、添加iptables规则等

使用本脚本可以自动批量完成中间节点环境的部署工作,包括:Nginx编译安装.添加程序管理脚本.设置开机启动.反向代理配置.证书分发.添加iptables规则等.脚本支持自定义nginx安装版本.设置编译模块.配置监听端口等. 1. Nginx Role规则说明 本脚本用于中间节点(Nginx反向代理)环境的自动化配置,主要内容包括: 安装基础依赖环境: 创建nginx启动用户(支持自定义用户): 下载nginx安装文件(可自定义nginx版本): 解压安装文件: 执行编译安装(可自定义编译参数和

openstack镜像-关于通过clone虚拟机制作的镜像开机后网卡eth0启动失败的问题

1,近日,拿到同事通过克隆做的一个镜像,上传到云平台,开机后加载网卡,发现eth0获取不到IP,重启network服务 service network restart  Shutting downloopback insterface:                                                           [  OK  ] Bringing uploopback insterface:                                 

Launcher Activity在开机时重启两次解决办法

今天在看log的时候发现,Launcher activity会被onDestroy掉一次,然后再重启. 可能原因猜测: 1.横竖屏切换 2.MCC MNC等Configuration改变引起的 MCC(移动国家码)和 MNC(移动网络码) 由于当时的Launcher设置为强制横屏了,应该是不会引起重启的. 对于Configuration改变系统会发一个android.intent.action.CONFIGURATION_CHANGED的广播 于是就做了一个广播接收器去检测是不是由于Config

开机eth0网络设备不启动

CentOS开机eth0网络设备不启动 新装一个CentOS系统,开机发现没有网络,于是ifconfig一下发现eth0设备网络没有启动 1 2 3 4 5 6 7 8 9 [[email protected] ~]# ifconfig  lo        Link encap:Local Loopback    inet addr:127.0.0.1  Mask:255.0.0.0  inet6 addr: ::1/128Scope:Host  UP LOOPBACK RUNNING  MT

增加系统开机关机主题(LinuxMint)

/*********************************************************************  * Author  : Samson  * Date    : 11/21/2014  * Test platform:  *              3.13.0-24-generic  *              GNU bash, 4.3.11(1)-release  * ************************************

查看linux系统的开机时间/重启历史记录

查看linux系统的开机时间/重启历史记录1.who -b命令[[email protected] opt]# who -b ---查看最后一次(上次)系统启动的时间 system boot Dec 27 05:06 2.who -r命令[[email protected] opt]# who -r ---查看最后一次(上次)系统启动的时间,及运行级别 run-level 5 Dec 27 05:06 3.last reboot命令 [[email protected] opt]# last r

C#.NET Form设置/取消开机自动运行,判断程序是否已经设置成开机自动启动(转载)

#region//开机自动运行        private void CB_Auto_CheckedChanged(object sender, EventArgs e)        {//CB_Auto是一个Checkbox,IsAutoRun 是个布尔变量,用于控制是否开机运行            if (CB_Auto.Checked == true) IsAutoRun = true;            else IsAutoRun = false;            tr

查看Linux开机时间/重启时间_命令

查看Linux开机时间/重启时间1. who 命令查看 who -b 查看最后一次系统启动的时间. who -r 查看当前系统运行时间 [[email protected] ~]# who -b system boot 2018-06-16 04:23 2.last reboot [[email protected] ~]# last reboot reboot system boot 2.6.32-431.11.25 Sat Jun 16 04:23 - 10:46 (1+06:23) reb