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

Jad*_*ias 4 wpf window windows-7

我曾经System.Windows.Window.IsActive检测窗口是否在前台,并且在某些情况下有效。但我发现了一些情况并非如此,我想知道是否有任何方法可以检测到它。

Jad*_*ias 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;
}
Run Code Online (Sandbox Code Playgroud)