给你一个过程(REBOOT标志说明重启还是关机)
已在D4/NT4/SP3下通过
procedure ShutDownNT(ReBoot:Boolean);
const
ADJUST_PRIV = TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES;
SHTDWN_PRIV = 'SeShutdownPrivilege';
PRIV_SIZE = SizeOf(TTokenPrivileges);
var
Len: DWORD;
TokenPriv, Dummy: TTokenPrivileges;
Token: THandle;
begin
OpenProcessToken(GetCurrentProcess, ADJUST_PRIV, Token);
LookupPrivilegeValue(nil, SHTDWN_PRIV,TokenPriv.Privileges[0].Luid);
TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
TokenPriv.PrivilegeCount := 1;
AdjustTokenPrivileges(Token, false, TokenPriv, PRIV_SIZE,Dummy, Len);
InitiateSystemShutDown(nil,nil,0,True,Reboot);
end;
已在D4/NT4/SP3下通过
procedure ShutDownNT(ReBoot:Boolean);
const
ADJUST_PRIV = TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES;
SHTDWN_PRIV = 'SeShutdownPrivilege';
PRIV_SIZE = SizeOf(TTokenPrivileges);
var
Len: DWORD;
TokenPriv, Dummy: TTokenPrivileges;
Token: THandle;
begin
OpenProcessToken(GetCurrentProcess, ADJUST_PRIV, Token);
LookupPrivilegeValue(nil, SHTDWN_PRIV,TokenPriv.Privileges[0].Luid);
TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
TokenPriv.PrivilegeCount := 1;
AdjustTokenPrivileges(Token, false, TokenPriv, PRIV_SIZE,Dummy, Len);
InitiateSystemShutDown(nil,nil,0,True,Reboot);
end;
你能不能将完整代码发过来,是不是在某些事件里无法关机?