如何在Windows平台的Avalonia UI中获取窗口句柄?
在Avalonia UI(Windows平台)中获取窗口句柄的原生方法
针对最新版Avalonia UI,无需访问受限的内部类型,可通过公开的平台特定接口获取Windows窗口句柄,步骤如下:
- 引入必要命名空间
using Avalonia; using Avalonia.Win32;
- 获取顶级窗口并转换为Windows平台接口
假设你已有窗口实例(比如mainWindow),通过TopLevel.GetTopLevel获取顶级窗口对象,再转换为IWin32Window接口即可拿到句柄:
var topLevel = TopLevel.GetTopLevel(mainWindow); if (topLevel is IWin32Window win32Window) { IntPtr windowHandle = win32Window.Handle; // 此处使用句柄进行后续操作 }
补充说明
- 若要在非UI类中获取主窗口句柄,可通过
Application.Current.MainWindow获取主窗口实例后重复上述步骤。 - 由于该代码仅适用于Windows平台,建议配合条件编译避免跨平台编译错误:
#if WINDOWS // 上述获取句柄的代码逻辑 #endif
之前的方法失效是因为Avalonia后续版本对内部API(如Avalonia.Win32.WindowImpl)做了访问权限限制,转而通过IWin32Window这个公开接口提供标准化的句柄访问方式,这也是官方推荐的原生实现方案。
内容的提问来源于stack exchange,提问作者DerraKuma




