我们知道,Winform或者WPF都有句柄。只不过WPF的句柄只有Window窗体才有,并且需要通过额外的方法来获取。然而,UWP程序竟然没有提供类似WPF获取句柄的方法。难道UWP就没有窗口句柄吗?今天我们就来看下如何获取UWP的窗口句柄。

先来看下WPF获取窗口句柄的方法:


//引入命名空间
using System.Windows.Interop;

//获取句柄,this表示一个window实例
new WindowInteropHelper(this).Handle

WPF获取窗口句柄看似挺简单的,只需要使用WindowInteropHelper对象即可获取。

再来看下UWP中获取窗口句柄的方法:


    //定义获取窗口句柄的接口

    [ComImport, Guid("45D64A29-A63E-4CB6-B498-5781D298CB4F")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    interface ICoreWindowInterop
    {
        IntPtr WindowHandle { get; }
        bool MessageHandled { set; }
    }

    //获取窗口句柄
    //获取当前线程的活动窗口,这里要使用动态类型解析,不然后面无法强转

    public IntPtr GetCurrentWindowHandle()
    {
        dynamic corewin = Windows.UI.Core.CoreWindow.GetForCurrentThread();
        var interop = (ICoreWindowInterop)corewin;
        return interop.WindowHandle;
    }
    

很明显可以看出,UWP获取窗口句柄的方法,比使用WPF获取窗口句柄的方法复杂的多。

下面推荐个查看窗口句柄的实用工具,可以帮助我们辅助测试

句柄小助手,点击此处下载


本文会经常更新,请阅读原文: https://huchengv5.gitee.io//post/UWP-%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E7%AA%97%E5%8F%A3%E5%8F%A5%E6%9F%84.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名胡承(包含链接: https://huchengv5.gitee.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系