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;