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)...
Dzięki. To się udało –