ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,5000);//关机 WM_QUERYENDSESSIONExitWindowsEx(EWX_REBOOT|EWX_FORCE,1000);//重新启动 WM_QUERYENDSESSIONExitWindowsEx(EWX_LOGOFF|EWX_FORCE,1);//注销 WM_QUERYENDSESSIONExitWindowsEx(EWX_POWEROFF|EWX_FORCE,1000);//等待 WM_QUERYENDSESSION以上只有『ExitWindowsEx(EWX_LOGOFF|EWX_FORCE,1);//注销』函数能正常工作
请问:其他三个为什么不能正常工作呢;我使用的系统是WindowNT 2000

解决方案 »

  1.   

    需要权限:
    void ShutDown()
    { if  (dwVersion  <    0x80000000)
    {
    TOKEN_PRIVILEGES tkp,tkpnewbutignored;
    HANDLE hdltokenhandle;
    LUID tmpluid;
    BOOL rc;
    DWORD lbufferneeded;
    HANDLE  hdlprocesshandle = GetCurrentProcess();
    rc = OpenProcessToken(hdlprocesshandle,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hdltokenhandle);
    rc = LookupPrivilegeValue("","SeShutdownPrivilege", &tmpluid);
    tkp.PrivilegeCount = 1; // one privilege to set
    tkp.Privileges[0].Luid = tmpluid;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    rc = AdjustTokenPrivileges(hdltokenhandle,FALSE,&tkp,sizeof(tkpnewbutignored),&tkpnewbutignored, &lbufferneeded);
    ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE,  0);
    }
    else
    {
    ExitWindowsEx(EWX_SHUTDOWN,0);
    }
    }