急等解决,请高手指点,马上结贴

解决方案 »

  1.   

    我听朋友说可能也是这个问题,但是不知道怎么设置权限,好象是AdjustTokenPrivileges,但还是不好用,请指点
      

  2.   

    //MyExitWindows(EWX_SHUTDOWN);  抄的function IsWin9x: Boolean;
    var
      OsInfo: TOSVERSIONINFO;
    begin
      OsInfo.dwOSVersionInfoSize := sizeof(TOSVERSIONINFO);
      GetVersionEx(OsInfo);
      Result := (OsInfo.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS);
    end;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;
      

  3.   

    帮助上说要用AdjustTokenPrivileges开启SE_SHUTDOWN_NAME的特权。
    不会开启,关注。
      

  4.   

    TO:jinjazz(人雅的标记--落寞刺客)你的方法确实是实现了。我现在急用,代码待会在研究,谢谢你了,有问题在请教。还有我在http://community.csdn.net/Expert/topic/3366/3366531.xml?temp=.321789也开了个帖子,你去把分领了吧:)那个还没人回答
      

  5.   

    错了,是用ExitWindowsEx(EWX_SHUTDOWN,4)
      

  6.   

    TO:jinjazz(人雅的标记--落寞刺客)出现问题了,不管是2000S还是2000P都提示“您可以安全的关闭计算机了”。是不是哪个参数不对?
      

  7.   

    TO:davidzhlu(可乐可乐)你说的方法不行,我试了
      

  8.   

    EWX_POWEROFF我也试了,还是提示可以安全关闭计算机了
      

  9.   

    不好意思,刚才着急放到WIN9X下了,现在好了,是可以关掉,可是当系统中有需要提示的程序存在,如DELPHI在调试状态的时候还是提示是否保存什么的,那样还是达不到关机的效果,怎么能强制关掉机器?谢谢
      

  10.   

    TO:yang946(侠之大者,为国为民)那是你用的参数不对,你用的是EWX_REBOOT吧
      

  11.   

    讨论这么多, jinjazz(人雅的标记--落寞刺客) 代码应该是正确的。
    就是NT系统下的线程标志问题(线程权限)