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