首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查其他程序是否正在全屏模式下运行,例如:一个媒体播放器

如何检查其他程序是否正在全屏模式下运行,例如:一个媒体播放器
EN

Stack Overflow用户
提问于 2010-09-26 20:39:56
回答 2查看 5.3K关注 0票数 4

如何检查其他应用程序是否在全屏模式下运行&在c++ MFC中处于最顶层?如果媒体播放器或其他播放器正在运行,我只想禁用所有的自动对话框(警告)。(就像Avast中的静默/玩家模式。)我怎么能这么做呢?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-26 21:49:20

结合使用EnumWindows、GetWindowInfo和GetWindowRect可以做到这一点。

代码语言:javascript
复制
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 );

edit2:更新了经过测试的代码,它在Windows7的MediaPlayer上运行得很好。我尝试使用GetForeGroundWindow而不是EnumWindows,但是IsFullScreenSize()检查只取决于鼠标在媒体播放器的确切位置。

请注意,在下面的注释中提到的多显示器设置问题仍然存在。

票数 8
EN

Stack Overflow用户

发布于 2013-08-12 22:58:49

在我看来只有很小的进步

代码语言:javascript
复制
bool AreSameRECT (RECT& lhs, RECT& rhs){
    return (lhs.bottom == rhs.bottom && lhs.left == lhs.left && lhs.right == rhs.right && lhs.top == rhs.top) ? true : false;
}


bool IsFullscreenAndMaximized(HWND hWnd)
{
    RECT screen_bounds;
    GetWindowRect(GetDesktopWindow(), &screen_bounds);

    RECT app_bounds;
    GetWindowRect(hWnd, &app_bounds);

    if(hWnd != GetDesktopWindow() && hWnd != GetShellWindow()) {
        return AreSameRECT(app_bounds, screen_bounds);
    }

    return false;
}

多亏了priviose的回答

代码语言:javascript
复制
BOOL CALLBACK CheckFullScreenMode ( HWND hwnd, LPARAM lParam )
{
    if( IsFullscreenAndMaximized(GetForegroundWindow()) )
    {
        * (bool*) lParam = true;
        std::cout << "true";

        return FALSE; 
    }
    return TRUE;
}


int main() {

    bool bThereIsAFullscreenWin = false;
    EnumWindows( (WNDENUMPROC) CheckFullScreenMode, (LPARAM) &bThereIsAFullscreenWin );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3797802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档