2012-04-17 10 views
6

.NET UIAutomation 또는 White 프레임 워크를 사용하여 모든 데스크톱 창을 찾으려고합니다. 내가 시도 :UIAutomation .NET을 사용하여 데스크톱에서 모든 창 찾기

1)

  AutomationElement rootElement = AutomationElement.RootElement; 
      var winCollection = rootElement.FindAll(TreeScope.Subtree, Condition.TrueCondition); 

2)

  Desktop.Instance.Windows(); 

던져 ArgumentException이 모두를. 다른 방법이 있다면 알려주십시오.

업데이트/답변 : Desktop.Instance.Windows(); VS2010을 사용하여 코드를 디버깅하는 동안 예외를 throw한다는 점을 제외하고는 정상적으로 작동합니다. 당신이 findall은 전화를 이용하여 바탕 화면의 바로 하위 요소 :

AutomationElement rootElement = AutomationElement.RootElement; 
    var winCollection = rootElement.FindAll(TreeScope.Children, Condition.TrueCondition); 

    foreach (AutomationElement element in winCollection) 
     Console.WriteLine(element.Current.Name); 

답변

4

. 일부 유형의 창은 FindWindow를 호출해야만 사용할 수 있습니다. mmc의 주 창이 숨겨져 UI 자동화에 사용할 수없는 시점에 MMC 콘솔의 자식 창이 될 수 있습니다. 창이 응용 프로그램의 기본 창이 아닌 경우에 대비하여 창이있는 스레드를 가져 오는 방법이 있습니까? 대답은 스레드를 열거하고 (종종 관리 권한이 필요함) 관심있는 창이 속한 스레드를 계산하는 것입니다.

일반적으로 Spy ++와 마찬가지로 모든 창을 열거 할 수있는 방법이 없습니다. 예를 들어 Get-UIAWindow는 UI 자동화 검색에 아무런 효과가없는 경우 단순히 FindWindow를 호출합니다.

0

그것은 불가능에 액세스하려면 작업을해야 TreeScope.Children를 사용

1

직장에서 UI 자동화 프로젝트는 사용

List<White.Core.UIItems.WindowItems.Window> windows = WindowFactory.Desktop.DesktopWindows();