如果你只是要关闭计算机的话:
ExitWindowsEx(1,0);  //关机
即可!

解决方案 »

  1.   

    procedure TMyForm.WMEndSession(var Msg:TWMEndSession);
    begin
            FClosing := True;
            // close;
            inherited;
    end;
      

  2.   

    还有,在NT/2000下,关机是要权限的。
    在调用ExitWindowsEx前先要调用 AdjustTokenPrivileges帮助文件里是这么说的,具体怎么用我也不知道,谁知道的告诉我。3X
      

  3.   

    你应该写上WMEndSession消息的返回值,你的程序在收到WMEndSession消息时就关闭自己,但又不允许Windows关闭,所以只关了你自己的程序。
      

  4.   

    hehe,获得权限的代码如下:
    var
     VerInfo:TOSVersionInfo;
     hToken:THANDLE;
     tkp:TOKEN_PRIVILEGES;
    begin
    VerInfo.dwOSVersionInfoSize:=SizeOf(VerInfo);
    GetVersionEx(VerInfo);
    if VerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then
     Begin
       OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
       LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
       tkp.PrivilegeCount:= 1;
       tkp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
       AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil, Nothing);
      End;
      ExitWindowsEx(//这边是你的重新启动参数);
     end;