PowerShell

PowerShellでUI Automationを使用する方法

PowerShell Thumbnail Image

PowerShellを使用してWindowsのUIを自動制御する方法のまとめです。本投稿ではソフトウェア、アプリのテスト、自動評価を目的としていません。デザイナーが楽をする為にUI Automationを活用する方法を模索します。 * もっと良い方法があったら教えてください。

スポンサーリンク

準備

PowerShellでUI Automationを使用するには「UI Automation PowerShell Extensions」というUI AutomationのPowerShell用ラッパーを用います。
下記URLから最新バージョンをダウンロードします。2016年8月15日の時点では「UIAutomation.0.8.7B3.NET35.zip」が最新版のようです。

http://uiautomation.codeplex.com/

PowerShellにモジュールを読み込む

UI Automation PowerShell Extensionsをダウンロードし解凍するとたくさんのファイルが入っています。その中にある「UIAutomation.dll」をPowerShellに読み込みます。
1行目におまじないを書きます。下記はデスクトップに解凍したフォルダ内のファイルを読み込んだ例です。読み込み先は変更してください。

Import-Module 'C:\Users\PC-USER\Desktop\UIAutomation.0.8.7B3.NET35\UIAutomation.dll'

Import-Moduleのエイリアスを使用するなら次のように書きます。

ipmo 'C:\Users\PC-USER\Desktop\UIAutomation.0.8.7B3.NET35\UIAutomation.dll'

これでPowerShellからUI Automationを使用する準備が整いました。
あとは付属の「UIAutomationSpy.exe」を用いて自動制御したいUIの情報を探っていきます。exeファイルの実行等が制限されている場合は、Inspect.exeやUiSpy.exe等、Windows SDKに付属するツールを使用してオブジェクトのClassName、Nameを探ります。

UI Automationのコマンドを用いてオブジェクトのName、Classを探る方法

UIAutomationSpy.exeやInspect.exeのツールが使用できない環境の場合、UI AutomationのRead関連のコマンドレットから探ることができます。
使用頻度の高いコマンドレットをメモしておきます。

Comandlet Comment
Read-UiaControlName オブジェクト名を読み取る
Read-UiaControlClass オブジェクトのクラス名を読み取る

ワイルドカードにすることで起動中のウィンドウのオブジェクト名、クラス名を読み取ることができます。

起動中ソフトウェアのオブジェクト名を読み取る方法

Import-Module 'C:\Users\PC-USER\Desktop\UIAutomation.0.8.7B3.NET35\UIAutomation.dll'
Get-UIAWindow -AutomationID * | Read-UIAControlName

実行結果

Windows PowerShell ISEとメモ帳を起動していた場合を想定

Windows PowerShell ISE メイン ウィンドウ
無題 - メモ帳

起動中ソフトウェアのオブジェクトクラス名を読み取る方法

Import-Module 'C:\Users\PC-USER\Desktop\UIAutomation.0.8.7B3.NET35\UIAutomation.dll'
Get-UIAWindow -AutomationID * | Read-UiaControlClass

実行結果

Windows PowerShell ISEとメモ帳を起動していた場合を想定

Shell_TrayWnd
Notepad

Reference

  • https://softwaretestingusingpowershell.wordpress.com
スポンサーリンク

コメントを残す