小弟已经已经知道利用exitwindows(ewx_reboot,0)进行restart!
  但是在win2k中,只能起到logoff的作用.而且exitwindows(ewx_shutdown,0)
  也只是起到了logoff的作用!                 请问那位大虾知道。请指教!!!
                                    谢谢!

解决方案 »

  1.   

    ExitWindowsEx(Ewx_Force or Ewx_Reboot,0);重起!ExitWindowsEx(Ewx_ShutDown or EWx_PowerOff,0);关机
      

  2.   

    SetPrivilege('SeShutdownPrivilege', true);
            ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE or EWX_POWEROFF, 0);
      

  3.   

    Win32Check(ExitWindowsEx(EWX_REBOOT, 0));  // 重启
    Win32Check(ExitWindowsEx(EWX_SHUTDOWN, 0));// 关机
    Win32Check(ExitWindowsEx(EWX_LOGOFF, 0));
      

  4.   

    各位大虾  小弟试过了。为何在win2k中出现的效果还是logoff??
             请指教!!
      

  5.   

    NT为内核的系统中关机是需要关机权限的,如“imageonline(不交房租)”所云。具体的设置权限的方法MSDN中有, CSDN记得也有人贴过。查找一下就可以了。
      

  6.   

    大虾:  请具体说说好吗?谢谢!!! 
      SetPrivilege('SeShutdownPrivilege', true);
      ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE or EWX_POWEROFF, 0);  delphi报错!                            谢谢!!
      

  7.   

    不好意思,写错了,setprivilege是我自己写的一个函数,
    下面的代码就可以
        HANDLE hToken;
        TOKEN_PRIVILEGES tkp,tkpNew;
        LUID ini64LpUid;
        unsigned long dwSize;
        OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
        LookupPrivilegeValue(NULL,"SeShutdownPrivilege",&ini64LpUid);
        tkp.PrivilegeCount = 1;
        tkp.Privileges[0].Luid = ini64LpUid;
        tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(hToken,FALSE,&tkp,sizeof(tkp),&tkpNew,&dwSize);
        ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE|EWX_POWEROFF, 0);