You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助Xamarin.Mac调用AppKit获取macOS桌面应用GUI元素数据?

macOS GUI元素信息获取方案(C#实现)

一、Xamarin.Mac + AppKit API实现方案

要捕获系统内点击的GUI元素并提取名称、描述、类、父/子元素等数据,可通过以下核心接口和步骤实现:

1. 监听全局鼠标点击事件

使用NSEvent.AddGlobalMonitorForEventsMatchingMask注册全局点击监听,指定NSEventMask.LeftMouseDown掩码捕获左键点击动作:

NSEvent.AddGlobalMonitorForEventsMatchingMask(NSEventMask.LeftMouseDown, (mouseEvent) => {
    // 处理点击事件,定位目标元素
});

2. 获取点击位置对应的GUI元素

  • 当前应用内元素:通过NSApplication.SharedApplication.KeyWindow.ContentView.HitTest(mouseEvent.LocationInWindow)获取点击位置的NSView实例。
  • 跨应用元素:需使用辅助功能(Accessibility)API,通过AXUIElementCreateSystemWide()创建系统级元素对象,再用AXUIElementCopyElementAtPosition()获取指定屏幕坐标的元素。

3. 提取元素核心数据

针对不同类型的元素对象,提取所需字段:

  • 元素名称/描述:
    • NSView:读取AccessibilityLabel(名称)和AccessibilityDescription(描述)属性
    • AXUIElement:调用AXUIElementCopyAttributeValue,传入kAXTitleAttribute和kAXDescriptionAttribute获取对应值
  • 类名:
    • NSView:直接读取ClassName属性
    • AXUIElement:通过AXUIElementCopyAttributeValue获取kAXClassNameAttribute或kAXRoleAttribute(角色类型)
  • 父元素:
    • NSView:访问Superview属性
    • AXUIElement:调用AXUIElementCopyAttributeValue传入kAXParentAttribute获取父元素对象
  • 子元素:
    • NSView:遍历Subviews集合
    • AXUIElement:调用AXUIElementCopyAttributeValue传入kAXChildrenAttribute获取子元素列表

4. 构建元素层级关系

通过递归遍历父元素(向上)和子元素(向下),可以完整构建GUI元素的层级结构,存储所需的父子关联数据。

二、其他可行方案

1. 直接调用原生Accessibility C API

无需依赖Xamarin.Mac完整框架,通过C#的DllImport直接调用macOS原生Accessibility函数,适合轻量级场景:

  • AXUIElementCreateSystemWide():创建系统级辅助元素
  • AXUIElementCopyAttributeValue():提取元素属性
  • AXUIElementCopyElementAtPosition():定位屏幕坐标对应的元素

2. 第三方开源库

  • 使用封装好的C#绑定库(如MacAccessibility),简化Accessibility API的调用流程,减少手动处理原生指针和错误的工作量。
  • 结合AppleScript:通过NSAppleScript执行AppleScript脚本获取GUI元素信息,但性能和灵活性不如直接调用API,适合简单场景。

3. 跨平台自动化库

如果需要同时支持多平台,可考虑使用Appium或Accessibility Insights的开源组件,这类工具封装了跨平台的UI自动化能力,macOS端底层仍依赖原生Accessibility API,但能提供统一的调用接口。

内容的提问来源于stack exchange,提问作者Владимир

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:25:44