You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Windows平台的Avalonia UI中获取窗口句柄?

在Avalonia UI(Windows平台)中获取窗口句柄的原生方法

针对最新版Avalonia UI,无需访问受限的内部类型,可通过公开的平台特定接口获取Windows窗口句柄,步骤如下:

  1. 引入必要命名空间
using Avalonia;
using Avalonia.Win32;
  1. 获取顶级窗口并转换为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

火山引擎 最新活动