给你一个过程(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;

解决方案 »

  1.   

    据我所知InitiateSystemShutDown()只有administator才能用。
      

  2.   

    yeah,你的代码和我的代码其实是一样的,你的我也试了,还是无法关机,不知是什么原因,我的也是D4/NT4/SP3,我的是NTServer。
    你能不能将完整代码发过来,是不是在某些事件里无法关机?
      

  3.   

    我没在NT SERVER上试过,但我想如果在SERVER上,没有权限肯定是不行,你是自己的机器还单位网络上的机器?我上面的实际已经是完整代码了,使用BUTTON1的CLICK事件调用即可。