単票入力画面で入力効率アップのための工夫が一切無く、ほぼ同じ内容を何度も入力するという非人間的な作業に追われている事務担当者というのは、私以外にも結構居るかと思う。清く正しいエンジニア兼業事務担当者としては、ここは自動化すべきだろう。というわけで、PowerShellとUI Automation PowerShell Extensionsを使って作業の自動化を試みるよ。
UI Automation PowerShell ExtensionsはVisual Studioで開発されたアプリケーション画面のテストを自動化するために提供されているMicrosoft UI AutomationをPowerShellから呼び出せるようにしたものです。
UI Automation PowerShell Extensionsには残念な制約があって、Powershell Version 2.0でないと動きません。もしより高いバージョンのPowershellが既にインストールされている場合は”powershell -version 2″とコマンドライン引数を指定して、低いバージョンで起動する必要があります。また動作には管理者権限が必要です。管理者権限を持つユーザーでログインするのは当然として、UACを有効にしている場合は「管理者として実行」を選択する必要があります。
まずはUI Automation PowerShell ExtensionsからUIAutomation.x.x.xxx.NET35.zipをダウンロードします。ダウンロードしたZIPファイルに含まれているファイルを適当なフォルダに解凍します。ここでは「C:\Program Files\WindowsPowerShell\Modules」に「UIAutomation」というフォルダを作ってそこに解凍することにします。
とりあえずコマンドプロンプトからメモ帳を起動して実験してみましょう。
PS C:\Windows\system32> Import-Module "C:\Program Files\WindowsPowerShell\Modules\UIAutomation\UIAutomation.dll" PS C:\Windows\system32> notepad PS C:\Windows\system32> $window = Get-UiaWindow -Name '無題 - メモ帳' PS C:\Windows\system32> $window.Keyboard.TypeText("Hello UI Automation")
実際にScriptを作るにはUIAutomationSpy.exeと言うプログラムが付属しています。これを起動して一連の操作を行うと、その操作をScriptに保存する事が出来ます。
UIAutomationSpy.exeを起動してStartボタンをクリックした後、Scriptにしたい一連の操作を実施し、Stopボタンをクリックします。Scriptタブに移動すると先ほどの操作を再現するためのScriptが生成されています。これをテキストエディタに張り付けて、Powershell Scriptとして保存します・・・が、この自動生成されるScriptはかなり汚いので実際に利用の際には大幅に修正する事になります。例えば先ほどのメモ帳に入力するサンプルも自動生成したScriptだとこうなります。
Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | ` Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'H' Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | ` Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hell' Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | ` Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello ' Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | ` Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello U' Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | ` Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI A' Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | ` Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI Au' Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | ` Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI Automati' Get-UiaWindow -Class 'Notepad' -Name '無題 - メモ帳' | ` Get-UiaDocument -AutomationId '15' -Class 'Edit' -Name 'Hello UI Automation'
・・・(´・ω・`)
「AutomationId」とかClassを調べるためのツールと割り切った方が良さそうですね。