首页 > Windows开发 > 详细

解决ShowInTaskbar=false的窗口在失去焦点后无法找到的问题

时间:2020-09-24 16:01:46      阅读:69      评论:0      收藏:0      [点我收藏+]

效果如图所示
这是失去焦点后找不到窗口,并且无法与主窗体交互的情况
技术分享图片
这是修复后可以正常交互的情况
技术分享图片

解决方法是设置Owner属性

关键代码

//GetForegroundWindow API
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

//从Handle中获取Window对象
static Window GetWindowFromHwnd(IntPtr hwnd)
{
    var window = HwndSource.FromHwnd((IntPtr)hwnd);
    dynamic customWindow = window.RootVisual;
    return customWindow;
}

//调用GetForegroundWindow然后调用GetWindowFromHwnd
static Window GetTopWindow()
{
    var hwnd = GetForegroundWindow();
    if (hwnd == null)
        return null;

    return GetWindowFromHwnd(hwnd);
}

public NotShowInTaskbarWindow(bool isSetOwner,Window window=null)
{
    InitializeComponent();
    if (isSetOwner)
    {
        if (window != null)
        {
            Owner = window;
        }
        else
        {
            Owner = GetTopWindow();
            //如果有传参UserControl作为内容,可以尝试使用Window.GetWindow(DependencyObject) 方法
        }
    }
}

示例代码

NotShowInTaskbarWindows

参考资料

WPF中Window的ShowInTaskbar、Owner和Topmost属性
Get WPF window by hWnd
Window.GetWindow(DependencyObject) 方法

解决ShowInTaskbar=false的窗口在失去焦点后无法找到的问题

原文:https://www.cnblogs.com/Lulus/p/13723904.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!