我需要在不重叠任何全屏窗口的情况下显示最顶层的窗口(系统托盘中的气球)。例如,如果用户观看电影时我的最顶层窗口出现,则该窗口不得出现在电影屏幕的顶部。该窗口必须仅在用户关闭全屏窗口时出现。
现在,我只是这样显示我的窗口:
window.show()
在样式中,我打开了这些属性:
<Setter Property="Topmost" Value="True" />
<Setter Property="WindowStyle" Value="None" />
<Setter Property="ShowActivated" Value="False" />
如果用户看电影或玩游戏,您能否帮助弄清楚如何在不打扰用户的情况下显示最顶层的窗口?
最佳答案
我不知道对这个 wpf 的任何内置支持。因此,如果我必须实现这一点,我会发现我的操作系统中的前台窗口是否以全屏模式运行,然后不要以全屏模式启动我的窗口。
要在操作系统中获取当前的前景窗口,我们需要导入一些 User32 函数
[DllImport("user32.dll")]
private static extern bool GetWindowRect(HandleRef hWnd, [In, Out] ref RECT rect);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
现在我们需要添加对
System.Windows.Forms
和 System.Drawing
的引用以获取当前的 Screen
。如果 ForegroundWindow 在全屏模式下运行,则以下函数返回。 public bool IsAnyWindowFullScreen()
{
RECT rect = new RECT();
GetWindowRect(new HandleRef(null, GetForegroundWindow()), ref rect);
return new System.Drawing.Rectangle(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top).Contains(Screen.PrimaryScreen.Bounds);
}
所以在启动我的窗口时,我会检查
if(!IsAnyWindowFullScreen())
{
window.Topmost = true;
}
window.Show();
关于c# - 如何在不重叠全屏窗口的情况下显示最顶层的窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24405261/