如何检查其他程序是否以全屏模式运行,例如.媒体播放器

TlM*_*EER 4 c++ mfc dialog fullscreen

如何检查其他应用程序是否以全屏模式运行并且在c ++ MFC中最顶层?如果媒体播放器或其他播放器正在运行,我只想禁用所有自动对话框(警告).(就像Avast中的静音/游戏模式一样.)我怎么能这样做?

谢谢.

sti*_*ijn 8

使用EnumWindows,GetWindowInfo和GetWindowRect的组合可以解决这个问题.

bool IsTopMost( HWND hwnd )
{
  WINDOWINFO info;
  GetWindowInfo( hwnd, &info );
  return ( info.dwExStyle & WS_EX_TOPMOST ) ? true : false;
}

bool IsFullScreenSize( HWND hwnd, const int cx, const int cy )
{
  RECT r;
  ::GetWindowRect( hwnd, &r );
  return r.right - r.left == cx && r.bottom - r.top == cy;
}

bool IsFullscreenAndMaximized( HWND hwnd )
{
  if( IsTopMost( hwnd ) )
  {
    const int cx = GetSystemMetrics( SM_CXSCREEN );
    const int cy = GetSystemMetrics( SM_CYSCREEN );
    if( IsFullScreenSize( hwnd, cx, cy ) )
      return true;
  }
  return false;
}

BOOL CALLBACK CheckMaximized( HWND hwnd, LPARAM lParam )
{
  if( IsFullscreenAndMaximized( hwnd ) )
  {
    * (bool*) lParam = true;
    return FALSE; //there can be only one so quit here
  }
  return TRUE;
}

bool bThereIsAFullscreenWin = false;
EnumWindows( (WNDENUMPROC) CheckMaximized, (LPARAM) &bThereIsAFullscreenWin );
Run Code Online (Sandbox Code Playgroud)

edit2:使用经过测试的代码更新,在Windows 7上适用于MediaPlayer.我尝试使用GetForeGroundWindow而不是EnumWindows,但IsFullScreenSize()检查仅适用于鼠标所在的媒体播放器区域.

请注意,下面评论中提到的多监视器设置问题仍然存在.