windows下通过uiAutomation技术获取ui元素

这篇具有很好参考价值的文章主要介绍了windows下通过uiAutomation技术获取ui元素。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        最近接个需求,要求获取 windowsui 元素,经一番搜索后了解到可通过工具 UISpy.exe 或 inspect.exe 来进行查看。以软件 davinci resolve 为例:

ui 元素抓取工具,windows,windows,uiautomation

        右侧即 UISpy 工具,根据内容可以看出已捕获到 davinci 界面的各属性及对应值。而 UISpyinspect 是基于 UI 自动化技术来实现的,现在试着自己写段程序来获取 ui 元素。根据 官网链接 介绍:

        UI 自动化(包括用于标准控件的客户端提供程序库)用托管代码编写,且 UI 自动化客户端应用程序可以使用 C# 或 Visual Basic .NET 轻松进行编程。 作为接口实现的 UI 自动化提供程序可以用托管代码或 C/C++ 编写。

        需要先创建个 c# 项目,并添加如下三个应用:

ui 元素抓取工具,windows,windows,uiautomation

         之后主方法代码如下:

static void Main(string[] args)
{
    Console.WriteLine("-------------------begin-----------------");
    // 获取 davinci 进程
    Process p = Process.GetProcessesByName("Resolve")[0];

    Console.WriteLine("进程名:" + p.ProcessName);
    Console.WriteLine("进程id:" + p.Id);
    Console.WriteLine("进程主窗口名称:" + p.MainWindowTitle);
    Console.WriteLine("进程主窗口句柄:" + p.MainWindowHandle);

    // 根据进程主窗口句柄获取 AutomationElement
    AutomationElement element = AutomationElement.FromHandle(p.MainWindowHandle);
    Console.WriteLine("current automationElement name:" + element.Current.Name);
    Console.WriteLine("current automationElement id:" + element.Current.NativeWindowHandle);

    // 色温组件 AutomationId
    object obj = "UiMainWindow.bigBossWidget.widgetStack_Panel.WStackPage_Color.m_pColorPanel.frameVerticalContainer.frameColorBottom.frameColorBottomToolsContainer.m_pFrameBottomMain.UiPrimaryWidgetContainer.BorderFrame.frameTabWidgetBorder.stackedWidget.colorWheelsTab.colorWheelsMainContainer.colorWheelsSplitter.colorWheelsStackedWidget.threeWayColorWidget.frameTopToolbar.threeWayTopWidget.sliderFrame.frameTint";
    Condition findCondition = new PropertyCondition(AutomationElement.AutomationIdProperty, obj);
    // 根据 automationId 获取色温组件
    AutomationElementCollection found = element.FindAll(TreeScope.Descendants, findCondition);
    Console.WriteLine("condition found :" + found.Count);

    foreach (AutomationElement ele in found) {
        Console.WriteLine("ele control type :" + ele.Current.LocalizedControlType);
        Console.WriteLine("ele class name :" + ele.Current.ClassName);
        Console.WriteLine("ele name :" + ele.Current.Name);
        // 根据 ClassName 值获取色温及对应值
        Condition labelCondition = new PropertyCondition(AutomationElement.ClassNameProperty, "QLabel");
        AutomationElementCollection eles = ele.FindAll(TreeScope.Descendants, labelCondition);
        Console.WriteLine("label ele num :" + eles.Count);

        foreach (AutomationElement e in eles) {
            Console.WriteLine("e name :" + e.Current.Name);
        }
    }

    Console.WriteLine("--------------------end------------------");
    Console.ReadKey();
}

        程序流程主要分以下几步:

  1. 根据进程名称获取进程标识;
  2. 根据进程标识的主窗口句柄获取 AutomationElement
  3. 根据 AutomationId 获取对应组件,如色温;
  4. 在组件中查询对应属性名称和属性值。

        这里有必要补充下色温组件的 AutomationId 来源,这是通过 UISpy 来查看的:

ui 元素抓取工具,windows,windows,uiautomation

        如果查询其它属性,也可以利用对应的 AutomationId 来进行查询,后面的 ClassNameQLabel 也是同理。最终程序输出如下:

ui 元素抓取工具,windows,windows,uiautomation

         至此也就获取了 UISpy 中显示的 ui 元素信息,以上。文章来源地址https://www.toymoban.com/news/detail-780200.html

到了这里,关于windows下通过uiAutomation技术获取ui元素的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Day:006(2 ) | Python爬虫:高效数据抓取的编程技术(爬虫工具)

    窗口的定位: 对于一个现代的web应用,经常会出现框架(frame) 或窗口(window)的应用,这也就给我们的定位带来了一个难题。 有时候我们定位一个元素,定位器没有问题,但一直定位不了,这时候就要检查这个元素是否在一个frame中,seelnium webdriver提供了一个switch_to_fram

    2024年04月12日
    浏览(39)
  • 微信小程序通过createSelectorQuery获取元素 高度,宽度与界面距离

    小程序官方有提供给我们一个 const query = wx.createSelectorQuery() 函数 我们可以先编写这样一段代码 wxml 这里 我们定义了 多块 view 都用 行内样式设置了它的 高度和宽度 js编写代码如下 我们运行代码 并点击按钮 点击查看 这里 我们获取了所有 类名中包含 textIn 的元素 并输出 这里

    2024年02月05日
    浏览(62)
  • 【Vue3】vue3通过ref获取元素离顶部的距离

    vue3版本 ^3.2.45 [ref].value.$el.getBoundingClientRect().top 通过ref获取元素。 使用 getBoundingClientRect().top 获取离顶部的距离 homeView.vue

    2024年02月15日
    浏览(52)
  • Python的UI操作——UiAutomation 库

    UiAutomation 库主要用于自动化测试和 UI 操作的场景。下面是一些常见的使用场景: 自动化测试:UiAutomation 库可以帮助开发人员编写自动化测试脚本,通过模拟用户操作和验证应用程序的行为来进行自动化测试。这可以提高测试效率、减少人工测试成本,并确保软件的质量和稳

    2024年02月04日
    浏览(34)
  • 初识UI自动化(inspect.exe + uiautomation)

    目录 一、前言 二、具体内容 inspect.exe讲解 Options(选项栏) Toolbar(工具栏)  uiautomation讲解 三、总结           笔者最近也在学习关于uiautomation的相关小项目,不过在做这些自动化之前,需要首先获取你需要操作的元素的相关信息,比如:鼠标点击事件、键盘输入事件,

    2023年04月22日
    浏览(96)
  • Python uiautomation获取微信内容!聊天记录、聊天列表、全都可获取

    Python uiautomation 是一个用于自动化 GUI 测试和操作的库,它可以模拟用户操作来执行各种任务。 通过这个库,可以使用Python脚本模拟人工点击,人工操作界面。本文使用 Python uiautomation 进行微信电脑版的操作。 以下是本次实验的版本号。 你需要安装 uiautomation 示例代码 代码解

    2024年02月04日
    浏览(64)
  • [unity]如何通过代码获取UI宽高和屏幕宽高

    1.获取UI宽高 首先,使用GetComponentRectTransform().sizeDelta获取,但是这样会有问题,会跟锚点设置有关,改变设置后获取不对 只适用于MiddleCenter 所以又看了API,可以使用GetComponentRectTransform().rect获取 打印如下:  2.获取屏幕宽高 宽度: UnityEngine.Screen.width 高度: UnityEngine.Screen.

    2024年02月17日
    浏览(40)
  • 探索Python自动化利器:Windows UIAutomation

    项目地址:https://gitcode.com/yinkaisheng/Python-UIAutomation-for-Windows 在计算机自动化领域,Python一直以其强大的库支持和简洁的语法深受开发者喜爱。对于Windows平台上的图形界面自动化测试或任务执行,Python-UIAutomation-for-Windows项目提供了一个极其有用的工具集。本文将深入探讨该项目

    2024年04月25日
    浏览(96)
  • windows账户安全(通过mimikatz、Jhon获取用户密码)

    1.获取Windows用户密码一mimikatz 打开windows server 2012虚拟机进入Administrator用户 第一步:首先关闭杀毒软件,接下来打开mimi katz.exe执行程序 第二步:提升到debug权限提示符下,输入命令 “privilege::debug” 第三步:输入抓取密码命令“sekurlsa::logonpasswords”,可以看到本机面已经获取

    2024年02月04日
    浏览(40)
  • google Chrome通过 扩展程序获取windows MAC地址

    介绍 chrome 获取mac地址插件 软件架构 参考chrome插件开发规范 安装教程 将插件根目录拷贝到任意磁盘目录,一旦选定切勿搬移,目录名不包含空格。 修改manifest.json 中matches属性为要启用的网站域名 安装chrome浏览器,打开浏览器 = 更多工具 = 扩展程序 = 开发者模式 = 加载已解

    2024年02月06日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包