回 帖 发 新 帖 刷新版面

主题:ExitWindowsEx(EWX_SHUTDOWN,0)关不了机?

[color=000080]关机问题:[/color]

  在程序中执行以下语句:

  ExitWindowsEx(EWX_SHUTDOWN,0);
  或
  DWORD tmp;
  ExitWindowsEx(EWX_SHUTDOWN,tmp);

  但关不了机?为何?

回复列表 (共12个回复)

11 楼

OSVERSIONINFO OsInfo;
        OsInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
        GetVersionEx(&OsInfo);
        //win98
        if( OsInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
    {

        ::ExitWindowsEx(EWX_SHUTDOWN,0);
    }
        //win2000
        if(OsInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
    {
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    if (!OpenProcessToken(GetCurrentProcess(),
            TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    {
        ShowMessage("无法打开存取令牌");
        return;
    }
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,
            &tkp.Privileges[0].Luid);

    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,
            (PTOKEN_PRIVILEGES)NULL, 0);
    if (GetLastError() != ERROR_SUCCESS)
    {
        ShowMessage("无法关机");
        return;
    }
    if (!ExitWindowsEx(EWX_POWEROFF | EWX_FORCE, 0))
        ShowMessage("无法关机");
    }

12 楼

行的话一定要给分呀!!!!!!!!!!:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册