UI自动化和控制

本文关键字:控制 自动化 UI | 更新日期: 2023-09-27 17:53:47

我正在继承一个具有相当奇怪需求的项目。这不是一个WPF项目,而是一个Winforms项目,当用户点击某些按钮时,它会启动一个第三方工具,并使用一些外部dll自动执行,我认为这些dll有Win32调用。

我想知道的是,因为这个应用程序的"启动器"需要自动从另一个应用程序本身,怎么可能找出什么按钮存在于该表单,并能够调用它?

如果能够使用Win32(或其他方式)来"跟踪"或"点击"我们不知道的元素,但我们可以以某种方式获得句柄,比如菜单项或选项卡控件或该控件上的特定选项卡,并能够点击它呢?

对此有什么想法吗?

本质上,我希望能够获得我们需要调用和处理的已知项的列表,然后能够对这些项/句柄执行一些自动化。

应用程序是在c#和。net Framework 3.5 Winforms中开发的。

UI自动化和控制

使用Inspect.exe代替UISpy.exe来读取winForm应用程序的属性

正如雷洋建议的那样,UIAutomation是你的朋友!

找到您的应用程序,这里有一个示例代码。

int processID; //look up at your applications processID with your windows taskexplorer under processes (PID)
Condition yourCondition = new PropertyCondition(AutomationElement.ProcessIdProperty, processID);
AutomationElement mainWindow = AutomationElement.RootElement.FindFirst(TreeScope.Element | TreeScope.Children, yourCondition);

几乎可以用同样的方法找到一个按钮。

String buttonId;//your Button ID
Condition yourCondition2 = new PropertyCondition(AutomationElement.AutomationId, buttonId);
AutomationElement yourButton = rootElement.FindFirst(TreeScope.Element | TreeScope.Descendants, yourCondition2);

,然后用invokePattern

调用它

但是你绝对应该阅读上面链接中提供的文档,并谷歌一些关于UIAutomation的基础知识。