我需要显示最顶层的窗口(系统托盘中的气球),而不会重叠任何全屏窗口。例如,如果用户观看电影时出现我的最顶层窗口,则该窗口不得出现在电影屏幕的顶部。只有当用户关闭其全屏窗口时,窗口才会出现。
现在,我只是这样展示我的窗户:
window.show()
在我打开这些属性的样式中:
<Setter Property="Topmost" Value="True" />
<Setter Property="WindowStyle" Value="None" />
<Setter Property="ShowActivated" Value="False" />
如果他看电影或玩游戏,你能帮忙弄清楚如何在不打扰用户的情况下展示最顶层的窗户吗?
答案 0 :(得分:1)
我不知道对此wpf的任何内置支持。因此,如果我必须实现这一点,我会发现我的操作系统中的Foreground窗口是全屏运行,然后不要全屏启动我的窗口。
要在操作系统中获取当前的Foreground窗口,我们需要导入一些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在FullScreen模式下运行,则函数返回。
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();
答案 1 :(得分:0)
非常特别的问题,我之前处理过类似的事情,我担心你不能按照自己的意愿做到这一点(纠正我,如果我错了我&# 39;我喜欢知道。)
这就是我处理你的问题的方法:
Dispatcher
的方法,该方法将设置Topmost = true