2014-03-26 4 views
-1

상당히 이상한 요구 사항이있는 프로젝트를 상속하고 있습니다. 이것은 WPF 프로젝트가 아니라 기본적으로 실행되는 Winforms 프로젝트이며 사용자가 특정 버튼을 클릭 할 때 타사 도구를 실행하고 Win32 호출이있는 외부 DLL을 사용하여 자동화합니다.UI 자동화 및 컨트롤

내가 알고 싶은 것은이 응용 프로그램 "시작 프로그램"이 다른 응용 프로그램에서 자동화되어야하기 때문에 해당 양식에있는 단추를 찾고 호출 할 수있는 방법은 무엇일까요?

우리에게 알려지지 않은 요소를 "추적"하거나 "클릭"할 수 있도록 Win32 (또는 다른 수단)를 사용할 수 있지만 어쨌든 메뉴 항목이나 탭 컨트롤을 말하는 핸들을 얻을 수있는 것은 어떨까요? 또는 해당 컨트롤의 특정 탭을 클릭 할 수 있습니까?

이 문제에 대한 의견이 있으십니까?

본질적으로 우리는 호출해야 할 알려진 항목의 목록을 가져 와서 해당 항목/핸들에 대한 자동화를 수행 할 수 있기를 원합니다.

이 응용 프로그램은 C# 및 .NET Framework 3.5 Winforms로 개발되었습니다.

+0

어떻게 valuePatterns에 대한? –

+0

감사합니다. 그러한 분야에 대한 지식이 없으므로 도움이되는 예제를 자세히 설명 할 수 있습니까? 고맙습니다. –

+0

System.Windows.Automation.AutomationElement를 확인하십시오. GetXXXPattern은 일부 정보를 반환 할뿐 아니라 'UISpy'를 다운로드하고 시도 할 수 있습니다. 나는 초보자도 ... –

답변

1
UISpy.exe 대신

대신에 here과 같이 Inspect.exe를 사용하여 winForm 응용 프로그램의 속성을 읽습니다.

Lei Yang이 제안한대로 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

로 호출하지만 당신은 definitly 위의 링크에서 제공 한 설명서를 읽고 UIAutomation에 대한 몇 가지 기본 사항을 구글해야