当前位置: 首页 > news >正文

Windows下使用UIAutomation技术遍历桌面窗口和指定窗口内容的AutomationWalker.exe的C#源代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Automation;
//引用"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\UIAutomationClient.dll"
//引用"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\UIAutomationTypes.dll"namespace ConsoleApp1
{class Program{static void WalkElement(AutomationElement element, TreeWalker walker, int depth, int limit){Console.WriteLine($"{new string(' ', depth * 2)}" + $"\"{element.Current.Name}\"");if (limit>0 && depth>=limit) return;AutomationElement child = walker.GetFirstChild(element);while (child != null){WalkElement(child, walker, depth + 1, limit);child = walker.GetNextSibling(child);}}static void Main(string[] args){if (args.Length < 1){Console.WriteLine("Usage: AutomationWalker \"window_title\"|desktop");return;} else if (args[0]=="desktop"){try{Console.WriteLine("Walker desktop begin ...");//Get the destkop elementAutomationElement elemDesktop = AutomationElement.RootElement;TreeWalker walker = TreeWalker.ControlViewWalker;WalkElement(elemDesktop, walker, 0, 1);Console.WriteLine("... Walker desktop end.");}catch (Exception){Console.WriteLine("Walker desktop error!");}return;}try{Console.WriteLine("Walker begin ...");//Get the destkop elementAutomationElement elemDesktop = AutomationElement.RootElement;//Search the Application main window by title from all childrenPropertyCondition pCondition = new PropertyCondition(AutomationElement.NameProperty, args[0]);AutomationElementCollection elemApplicationWindows = elemDesktop.FindAll(TreeScope.Children, pCondition);Console.WriteLine("elemApplicationWindows.Count:" + elemApplicationWindows.Count);for (int i = 0; i < elemApplicationWindows.Count; i++){TreeWalker walker = TreeWalker.ControlViewWalker;WalkElement(elemApplicationWindows[i], walker, 0, 0);}Console.WriteLine("... Walker end.");}catch (Exception){Console.WriteLine("Walker error!");}}}
}

将以上代码放在C#控制台项目中,生成AutomationWalker.exe

用法:

在cmd窗口中输入命令

AutomationWalker.exe desktop

列出当前桌面上所有窗口的用双引号括住的标题,比如

Walker desktop begin ...
""
""
"管理员: 命令提示符 - automationwalker  desktop"
"新标签页 - Google Chrome"
"dummyLayeredWnd"
"Program Manager"
... Walker desktop end.

输入命令

AutomationWalker.exe "新标签页 - Google Chrome"

列出窗口"新标签页 - Google Chrome"的内容。

当你想要提取某个窗口的文本内容时,使用AutomationWalker会很方便。

http://www.lryc.cn/news/598639.html

相关文章:

  • Java中的静态变量是在“堆“还是“方法区“?
  • 视频模型国产PK国外?
  • Leetcode—1035. 不相交的线【中等】
  • TDengine 转化类函数 CAST 用户手册
  • Windows 11下纯软件模拟虚拟机的设备模拟与虚拟化(仅终端和网络)
  • C++性能优化实战‘从毫秒到微秒的底层突围‘
  • Windows 10 停服:个人与企业的 “系统选择题”
  • MNIST 手写数字识别模型分析
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——4. 前后端联动:打通QML与C++的任督二脉
  • LAYOUT 什么时候需要等长布线?
  • 【牛客刷题】和零在一起
  • 【Linux】Linux了解与基本指令(1)
  • 数据库期中复习
  • SkyWalking异步采集spring gateway日志
  • postgresql执行创建和删除时遇到的问题
  • AWS云S3+Glue+EMRonEC2+ReadShift
  • ThinkPHP8集成RabbitMQ的完整案例实现
  • 使用 Strands Agents 开发并部署生产级架构通用型个人助手
  • 【论文阅读】基于EEG的冥想状态数据挖掘研究(2025)
  • 深入探索Amazon SQS:构建弹性微服务与无服务器应用的秘密武器
  • Nodejs:从“模块未找到”到“大师之路”, 项目初始化与依赖安全完全指南
  • JimuReport 积木报表 v2.1.1 版本发布,免费开源的报表和大屏
  • 主流摄像头协议及其开源情况,GB/T 28181协议介绍
  • Word2Vec模型训练全流程解析:从数据预处理到实体识别应用
  • PyTorch常用Tensor形状变换函数详解
  • 如何恢复mysql,避免被研发删库跑路
  • 多模态数据处理系统:用AI读PDF的智能助手系统分析
  • 六、Element-快速入门
  • K8s WebUI 选型:国外 Rancher vs 国内 KubeSphere vs 原生 Dashboard,从部署到使用心得谁更适合企业级场景?
  • 从零用java实现 小红书 springboot vue uniapp(14) 集成阿里云短信验证码