【问题标题】:Determine whether active window is WPF window判断活动窗口是否为WPF窗口
【发布时间】:2013-06-18 06:46:30
【问题描述】:

我获得了带有GetActiveWindow 的UI 线程的活动窗口。如果它是 WPF 弹出窗口,我需要关闭窗口。

如何判断窗口是否为 wpf 窗口?

【问题讨论】:

    标签: c# .net wpf winforms


    【解决方案1】:

    使用HwndSource

    http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndsource.fromhwnd.aspx

    如下:

    IntPtr hwnd = GetActivewWindow();
    
    HwndSource hwndsrc = HwndSource.FromHwnd(hwnd);
    
    // Use any variation on this code
    
    if (hwndsrc != null && hwndsrc.RootVisual != null)
    {
        Window window = hwndsrc.RootVisual as Window;
    
        if (window != null)
        {
            window.Close();
        }
    
        // UPDATE: I've added looking for a "Popup" window as well
        // because your question mentions "pop up window"...but
        // not sure if you meant a top-level Window, or a Popup...
        // ....Popup windows have HWND too!
    
        Popup popupwindow = hwndsrc.RootVisual as Popup;
    
        if (popupwindow != null)
        {
            popupwindow.IsOpen = false;
        }
    }
    

    【讨论】:

    • 代码如何保证是WPF窗口且窗口不对应窗体?
    • 它不会对应于 Windows 窗体...因为 HwndSource 仅在使用连接到某些 WPF 视觉对象的 HWND 时才会返回某些内容。在示例中,我展示了检查 RootVisual 是否是 WPF 窗口,因为这是您要检查的内容。
    猜你喜欢
    • 2010-10-05
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多