2014-03-26 54 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一些基本..