Сценарий PowerShell UIAutomation не возвращает ожидаемый результат - PullRequest
1 голос
/ 14 сентября 2010

[Я опубликовал этот вопрос ранее на форуме PowerShell Technet, но без ответа]

Я пытаюсь изменить настройки быстрого запуска Windows XP (включить / отключить его с помощью PowerShell).Существующие решения VBScript используют либо Registry, либо SendKeys, поэтому я подумал, что это будет возможно в PowerShell через UIAutomation.Моей первой попыткой было просто получить ссылку на элемент AutomationElement, представляющий флажок, который необходимо изменить (Панель управления -> Панель задач и меню «Пуск» -> вкладка «Панель задач» -> Показать флажок быстрого запуска).Вот скрипт:

[void][System.Reflection.Assembly]::LoadWithPartialName("UIAutomationClient")
[void][System.Reflection.Assembly]::LoadWithPartialName("UIAutomationTypes")

$root = [Windows.Automation.AutomationElement]::RootElement

$condition1 = New-Object Windows.Automation.PropertyCondition([Windows.Automation.AutomationElement]::NameProperty, 'Taskbar and Start Menu Properties')
$properties = $root.FindFirst([Windows.Automation.TreeScope]::Descendants, $condition1)

$condition2 = New-Object Windows.Automation.PropertyCondition([Windows.Automation.AutomationElement]::NameProperty, 'Show Quick Launch')

$checkboxes = $properties.FindAll([Windows.Automation.TreeScope]::Descendants, $condition2)

foreach($checkbox in $checkboxes)
{
  $checkbox.Current.Name
  $checkbox.Current.ControlType.ProgrammaticName
}

Скрипты не выдают ошибку, но возвращают неожиданные результаты:

Показать быстрый запуск

ControlType.Pane

Вместо ControlType.CheckBox скрипт видит элемент AutomationElement как ControlType.Pane.Эквивалентное (по крайней мере, мне так кажется) консольное приложение C # возвращает ожидаемые результаты:

using System;
using System.Windows.Automation;

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      AutomationElement root = AutomationElement.RootElement;
      AutomationElement properties = root.FindFirst(
        TreeScope.Descendants,
        new PropertyCondition(AutomationElement.NameProperty,
          "Taskbar and Start Menu Properties"));

      AutomationElementCollection checkboxes = properties.FindAll(
        TreeScope.Descendants,
        new PropertyCondition(AutomationElement.NameProperty,
          "Show Quick Launch"));

      foreach (AutomationElement checkbox in checkboxes)
      {
        Console.WriteLine(checkbox.Current.Name);
        Console.WriteLine(checkbox.Current.ControlType.ProgrammaticName);
      }
    }
  }
}

Показать быстрый запуск

ControlType.CheckBox

Что я делаю не так?Сценарий PowerShell выполняется от ISE (так V2), и оба сценария и программа C # предполагают, что апплет уже открыт / видим.(XP SP3)

1 Ответ

1 голос
/ 25 октября 2010

Попробуйте решение, приведенное здесь: http://theadminblog.blogspot.com/2010/09/wpf-ui-automation-powershell-problem.html Автор столкнулся с той же проблемой и решил ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...