2014-03-26 56 views
-1

我正在继承一个具有相当奇怪要求的项目。这不是一个WPF项目,而是一个基本上运行的Winforms项目,当用户点击某些按钮时,它会启动第三方工具,并使用某些外部dll(我认为它具有Win32调用)来自动执行该工具。UI自动化和控件

我想知道的是,因为这个应用程序“启动器”需要从另一个应用程序自动进行自动化,所以如何才能找出该窗体上存在哪些按钮并且能够调用它?

如何能够使用Win32(或其他方法)能够“追踪”或“点击”我们不知道的元素,但不知何故,我们可以得到句柄来说一个菜单项或一个选项卡控件或该控件上的特定选项卡并能够点击它?

对此有何看法?我希望能够获得我们需要调用和玩弄的已知项目的列表,然后能够对这些项目/句柄执行一些自动化操作。

该应用程序是在C#和.NET Framework 3.5 Winforms中开发的。

+0

如何valuepatterns? –

+0

谢谢。由于我不了解这样的领域 - 你能否用一些有用的例子来深入解释?谢谢 –

+0

请检查System.Windows.Automation.AutomationElement,它的GetXXXPattern会返回一些信息,另外,你可以下载'UISpy'并试试。我也是新手... –

回答

1

而不是UISpy.exe使用Inspect.exe作为建议here来从您的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); 

A键就可以找到几乎相同的方式。

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

的再与invokePattern

调用它,但是你应该definitly阅读上面的链接提供的文件和google一下UIAutomation一些基本..