~UI Automationで画面操作自動化!その1~ UI Automation with PowerShell 奮戦記 12日目

UI Automation*1で遊ぼう!

UI Automation の画面操作の自動化機能を使用したWindowsの自動設定に挑戦しています。Windowsの標準実装のみ、PowerShellのみで動作させることを目指しています。

UI Automationでの画面操作の捕捉をPowerShellで出来るようにEventタイプを.Net Framworkで実装しました。
実装した開発ライブラリ、共通で使用するスクリプトについては以下を確認してくださいね。
https://amon52280sub.hateblo.jp/entry/2019/01/23/032420


3つめのプロジェクトWindowsの自動設定の調査を開始します。
~UI Automationで画面情報取得!その2~ UI Automation with PowerShell 奮戦記 10日目 - こんぴゅーた奮戦記
で取得した画面情報からコンピュータの説明の部分を自動設定してみます。
システムのプロパティ(コンピューター名)の画面情報

ControlType  ClassName       Name
ダイアログ        #32770          システムのプロパティ
  ボタン        Button          OK
  ボタン        Button          キャンセル
  ボタン        Button          適用(A)
  タブ         SysTabControl32
    タブ項目                     コンピューター名
      テキスト   Static          コンピューターの説明(D):
      編集     Edit            コンピューターの説明(D):
      テキスト   Static          例: "キッチンのコンピューター"、"仕事用コンピューター"
      テキスト   Static          フル コンピューター名:
      編集     Edit            フル コンピューター名:
      テキスト   Static          ワークグループ:
      編集     Edit            ワークグループ:
      テキスト   Static          ドメインまたはワークグループに参加するためのウィザードを使用するには [ネットワーク ID] をク
リックしてください。
      ボタン    Button          ネットワーク ID(N)...
      テキスト   Static          このコンピューターの名前を変更するには、[変更] をクリックしてください。

      ボタン    Button          変更(C)...
      テキスト   Static
      イメージ   Static
      テキスト   Static          次の情報は、このコンピューターをネットワーク上で識別するために使われます。

    タブ項目                     ハードウェア
    タブ項目                     詳細設定
    タブ項目                     システムの保護
    タブ項目                     リモート
  タイトル バー                    システムのプロパティ
    メニュー バー                  システム メニュー バー
      メニュー項目                 システム
    ボタン                      閉じる

PowerShell Version3(管理者権限)で実行してみる。

# UI Automation 共通ファンクションを組み込む
. .\UIA.ps1

# 初期化
$global:uia = UIA_Init

# システムのプロパティ(コンピューター名)を表示
SystemPropertiesComputerName.exe
sleep 5

# システムのプロパティ画面の構成
$syse = $re.FindAll($subtree,$condition_true) | ?{($_.current.name -eq "システムのプロパティ")} | ?{$_.current.localizedcontroltype -eq "ダイアログ"}

# コンピューターの説明(D):
$infe = $syse.FindAll($subtree,$condition_true) | ?{($_.current.name -eq "コンピューターの説明(D):")} | ?{$_.current.localizedcontroltype -eq "編集"}

# コンピューターの説明(D): を更新
$infp=$infe.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern)
$infp.SetValue("コンピューターの説明を更新したよ!")

実行結果

f:id:amon52280:20181203235718p:plainf:id:amon52280:20190114065027p:plain
コンピューターの説明を更新

コンピューターの説明を自動設定出来ました。

*1:ここでのUI AutomationはSystem.Windows.Automationのことです