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」が最新版のようです。
//uiautomation.codeplex.com/
PowerShellにモジュールを読み込む
UI Automation PowerShell Extensionsをダウンロードし解凍するとたくさんのファイルが入っています。その中にある「UIAutomation.dll」をPowerShellに読み込みます。
1行目におまじないを書きます。下記はデスクトップに解凍したフォルダ内のファイルを読み込んだ例です。読み込み先は変更してください。
1 |
Import-Module 'C:\Users\PC-USER\Desktop\UIAutomation.0.8.7B3.NET35\UIAutomation.dll' |
Import-Moduleのエイリアスを使用するなら次のように書きます。
1 |
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 | オブジェクトのクラス名を読み取る |
ワイルドカードにすることで起動中のウィンドウのオブジェクト名、クラス名を読み取ることができます。
起動中ソフトウェアのオブジェクト名を読み取る方法
1 2 |
Import-Module 'C:\Users\PC-USER\Desktop\UIAutomation.0.8.7B3.NET35\UIAutomation.dll' Get-UIAWindow -AutomationID * | Read-UIAControlName |
実行結果
Windows PowerShell ISEとメモ帳を起動していた場合を想定
1 2 |
Windows PowerShell ISE メイン ウィンドウ 無題 - メモ帳 |
起動中ソフトウェアのオブジェクトクラス名を読み取る方法
1 2 |
Import-Module 'C:\Users\PC-USER\Desktop\UIAutomation.0.8.7B3.NET35\UIAutomation.dll' Get-UIAWindow -AutomationID * | Read-UiaControlClass |
実行結果
Windows PowerShell ISEとメモ帳を起動していた場合を想定
1 2 |
Shell_TrayWnd Notepad |
Reference
- //softwaretestingusingpowershell.wordpress.com
コメントを残す