提升关机权限{ 注销:MyExitWindows(EWX_LogOff); 重启:MyExitWindows(EWX_REBOOT); 关机:MyExitWindows(EWX_SHUTDOWN); } function SetShutdownPrivilege(Enable: Boolean): Boolean; var PrevPrivileges: TTokenPrivileges; Privileges: TTokenPrivileges; Token: THandle; dwRetLen: DWord; begin Result := False; OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token); Privileges.PrivilegeCount := 1; if LookupPrivilegeValue(nil,'SeShutdownPrivilege', Privileges.Privileges[0].LUID) then begin if Enable then Privileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else Privileges.Privileges[0].Attributes := 0; dwRetLen := 0; Result := AdjustTokenPrivileges(Token, False, Privileges, SizeOf(PrevPrivileges), PrevPrivileges, dwRetLen); end; CloseHandle(Token); end;procedure MyExitWindows(const P:Word); begin Application.Terminate; if IsWin9x then ExitWindowsEx(EWX_FORCE or P, 0) else begin SetShutdownPrivilege(True); ExitWindowsEx(EWX_FORCE or P, 0); SetShutdownPrivilege(False); end; end;
谢谢 jinjazz(近身剪(充电中...)) 我刚刚试过了..运行到.if IsWin9x then 就过不去.. 我改了一下..因为我在2000下面试了.. procedure MyExitWindows(const P:Word); begin SetShutdownPrivilege(True); ExitWindowsEx(EWX_FORCE or P, 0); SetShutdownPrivilege(False); end; 可以关了.不过不是智能关机..出现可以安全关机了..这是怎么回事.
注销:MyExitWindows(EWX_LogOff);
重启:MyExitWindows(EWX_REBOOT);
关机:MyExitWindows(EWX_SHUTDOWN);
}
function SetShutdownPrivilege(Enable: Boolean): Boolean;
var
PrevPrivileges: TTokenPrivileges;
Privileges: TTokenPrivileges;
Token: THandle;
dwRetLen: DWord;
begin
Result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);
Privileges.PrivilegeCount := 1;
if LookupPrivilegeValue(nil,'SeShutdownPrivilege', Privileges.Privileges[0].LUID) then
begin
if Enable then
Privileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
Privileges.Privileges[0].Attributes := 0;
dwRetLen := 0;
Result := AdjustTokenPrivileges(Token, False, Privileges, SizeOf(PrevPrivileges), PrevPrivileges, dwRetLen);
end;
CloseHandle(Token);
end;procedure MyExitWindows(const P:Word);
begin
Application.Terminate;
if IsWin9x then
ExitWindowsEx(EWX_FORCE or P, 0)
else
begin
SetShutdownPrivilege(True);
ExitWindowsEx(EWX_FORCE or P, 0);
SetShutdownPrivilege(False);
end;
end;
我刚刚试过了..运行到.if IsWin9x then 就过不去..
我改了一下..因为我在2000下面试了..
procedure MyExitWindows(const P:Word);
begin
SetShutdownPrivilege(True);
ExitWindowsEx(EWX_FORCE or P, 0);
SetShutdownPrivilege(False);
end;
可以关了.不过不是智能关机..出现可以安全关机了..这是怎么回事.