如何检测当前的WPF窗口是否在用户会话前台?

4

我曾使用System.Windows.Window.IsActive来检测窗口是否处于前台,并且在某些情况下它是有效的。但是我发现有些情况下它并不起作用,我想知道是否有其他方法可以检测。

1个回答

5
以下方法在大部分情况下能够使用,但是当一个仅有后台运行的进程获取了焦点时会出现问题。这种情况常见于Windows桌面环境中,它会夺取前景窗口的状态,但并不在前台显示。
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

public bool IsForeground()
{
     Window window = Application.Current.MainWindow;
     IntPtr windowHandle = new WindowInteropHelper(window).Handle;
     IntPtr foregroundWindow = GetForegroundWindow();
     return windowHandle == foregroundWindow;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接