问题 在Windows中检测全屏模式


如果某些应用程序当前以全屏模式运行,我需要检测。如果是,那么我必须停止我的申请。那我怎么能发现呢? 附: Win32 C ++


12763
2017-08-10 10:08


起源



答案:


hWnd = GetForegroundWindow();
RECT appBounds;
RECT rc;
GetWindowRect(GetDesktopWindow(), &rc);

然后检查该窗口是不是桌面还是shell。 简单的指令。

if(hWnd =! GetDesktopWindow() && hWnd != GetShellWindow())
{
    GetWindowRect(hWnd, &appBounds);
    // Now you just have to compare rc to appBounds
}

这是没有测试的。


9
2017-08-10 10:57



非常感谢,这非常有帮助! - lebron2323


答案:


hWnd = GetForegroundWindow();
RECT appBounds;
RECT rc;
GetWindowRect(GetDesktopWindow(), &rc);

然后检查该窗口是不是桌面还是shell。 简单的指令。

if(hWnd =! GetDesktopWindow() && hWnd != GetShellWindow())
{
    GetWindowRect(hWnd, &appBounds);
    // Now you just have to compare rc to appBounds
}

这是没有测试的。


9
2017-08-10 10:57



非常感谢,这非常有帮助! - lebron2323


全面实施Hooch的答案:

bool isFullscreen(HWND window)
{
    RECT a, b;
    GetWindowRect(window, &a);
    GetWindowRect(GetDesktopWindow(), &b);
    return (a.left   == b.left  &&
            a.top    == b.top   &&
            a.right  == b.right &&
            a.bottom == b.bottom);
}

3
2017-07-04 06:07





这也是一个 Java  JNA 基于的实现 ENS'回答:

public static boolean isFullScreen()
{
    WinDef.HWND foregroundWindow = GetForegroundWindow();
    WinDef.RECT foregroundRectangle = new WinDef.RECT();
    WinDef.RECT desktopWindowRectangle = new WinDef.RECT();
    User32.INSTANCE.GetWindowRect(foregroundWindow, foregroundRectangle);
    WinDef.HWND desktopWindow = User32.INSTANCE.GetDesktopWindow();
    User32.INSTANCE.GetWindowRect(desktopWindow, desktopWindowRectangle);
    return foregroundRectangle.toString().equals(desktopWindowRectangle.toString());
}

请注意 toString() 底部的比较是一个小的黑客,以避免比较4个元素彼此。


0
2017-08-10 21:42