谁知道怎么调用windows的关机对话框?

解决方案 »

  1.   

    if(AfxMessageBox("确定关机么? ",MB_YESNO|MB_ICONQUESTION)==IDYES)
       if(!ExitWindowsEx(EWX_SHUTDOWN,0))
       {
          CString strError;
      strError.Format("错误码:%d。",GetLastError());
      if(m_nWinVersion==WIN_95||m_nWinVersion==WIN_98||m_nWinVersion==WIN_ME)
                 strError=_T("关机失败!")+strError;
      else
     strError=_T("您没有关机权限!")+strError;  
      AfxMessageBox(strError,MB_OK|MB_ICONINFORMATION);
       }
    只能在win98里关机,2000和xp不行
      

  2.   

    static HANDLE hToken;
    static TOKEN_PRIVILEGES tp;
    static LUID luid;
    ::OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken ) ;
    ::LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &luid );
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    ::AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL );
    ::ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0);
      

  3.   

    winexec(Pchar('StrCommand'),sw_Show);其中"StrCommand"代表以下命令之一(使用Windows中的运行不要加引号):"rundll32 shell32,SHExitWindowsEx 1" - 关机
      

  4.   

    DWORD dwVersion;
    TOKEN_PRIVILEGES tkp;
    HANDLE hToken;
        
    dwVersion = GetVersion();
    if(dwVersion < 0x80000000)
    {//NT

           if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
    {
    MessageBox("OpenProcessToken failed!");
    }
            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) 
    {
                MessageBox("AdjustTokenPrivileges enable failed!");
    }

    BOOL fResult =InitiateSystemShutdown( 
    "Lf",                 
    "WINDOWS将在上面的时间内关机,请做好保存工作!",  // 显示的消息
    10,                                // 关机所需的时间
    TRUE,                                 
    TRUE);                             //设为TRUE为重起,设为FALSE为关机

            if(!fResult) 
            { 
    MessageBox("InitiateSystemShutdown failed."); 

        } else
    {//95
    ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
    }