2013-08-10 13 views
5

Próbuję użyć automatyzacji .NET UI. Mam aplikację innej firmy, o której wiem, że jest napisana w .NET, ale nie mam kodu źródłowego. Uruchamiam aplikację przy pomocy Process.Start ("ścieżka exe"); i uzyskanie ProcessID a następnie wyszukać w oknie głównym aplikacji przezAutomatyzacja interfejsu użytkownika i pozycja menu

this.MainWindow = AutomationElement.RootElement.FindFirst 
        (TreeScope.Children, 
        new AndCondition(
         new PropertyCondition(AutomationElement.ProcessIdProperty, this.ProcessId), 
         new PropertyCondition(AutomationElement.NameProperty, InitialWindowName) 
         )); 

ten pracuje znaleźć Ale w głównym oknie, jest tam bar menu, które ma wspólny „Plik, Edycja, ... „

więc następnym krokiem ja wybrać pasek menu i rozwiń menu Plik z

var menuBar = this.MainWindow.FindFirst(TreeScope.Children, 
             new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "menu bar")); 
       var fileMenu = menuBar.FindAll(TreeScope.Children, Condition.TrueCondition)[0]; 
       var expandPattern = fileMenu.GetCurrentPattern(ExpandCollapsePattern.Pattern) as ExpandCollapsePattern; 
       if (expandPattern.Current.ExpandCollapseState != ExpandCollapseState.Expanded) 
        expandPattern.Expand(); 
       Thread.Sleep(3000); 

Ponieważ«Plik»opcja menu jest pierwsza opcja w menu, więc jest to rozszerzenie” Plik " menu opcje

Teraz chcę wywołać pozycję menu drukowania na liście menu "Plik".

pozycja menu drukowania ma nazwę "Print Document Ctrl + P"

więc szukać

var printMenuItem = this.MainWindow.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty,"Print Document Ctrl+P")); 

ale bez powodzenia. Próbowałem inny sposób, jak się wszystkie przedmioty potomków i pętli poprzez nazwy, aby znaleźć, jeśli mają „Drukuj” w nich bez powodzenia, jak to

var list = this.MainWindow.FindAll(TreeScope.Descendants, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty,"menu item")); 
for (int i = 0; i < list.count; i++) 
{ 
    if (list[0].Current.Name.IndexOf("Print") > -1)... 

Odpowiedz

2

Próbowałem to i był w stanie znaleźć menu drukowania

var printMenu = fileMenu.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "Print")); 
+0

Dzięki. To się udało –

Powiązane problemy