単票入力画面で入力効率アップのための工夫が一切無く、ほぼ同じ内容を何度も入力するという非人間的な作業に追われている事務担当者というのは、私以外にも結構居るかと思う。清く正しいエンジニア兼業事務担当者としては、ここは自動化すべきだろう。というわけで、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を調べるためのツールと割り切った方が良さそうですね。
> 残念な制約
UIAutomation.x.x.xxx.NET35.zip ではなくて
UIAutomation.x.x.xxx.NET40.zip をダウンロードするといいのでは
UIAutomation PowerShell Extensionsを入手しようと思い、紹介された以下のURLでUiAutomation.zipをダウンロードしましたが、UIAutomation.dll等のファイルが見当たりません。どうしてでしょうか?
https://archive.codeplex.com/?p=uiautomation
UIAutomation.x.x.xxx.NET35.zipをダウンロードできる場所が他に何処かにあるのでしょうか。もしご存じならご教授お願いします。
リンク先にあるCodeplexはMicrosoftがオープンソース開発者向けに提供していたサービスなのですが、2017年12月15日をもってサービス終了になっています。https://archive.codeplex.com/?p=uiautomationにあるダウンロードは、インストーラのダウンロードではなく、サービス終了になったWEBサイトのアーカイブです。ソースコード自体はhttps://github.com/apetrovskiy/STUPS/tree/master/UIAにあるのですが、インストール用のバイナリパッケージは置かれていないようです。
・・・と言う訳で下記のページにアップロード致しました。もし宜しければ、ダウンロードしてご活用下さい。
https://www.code-lab.net/?page_id=21648
ご親切にアップロードして頂き誠にありがとうございました。
サービス終了になっていたとは知りませんでした。
既存の計測ソフトを自動化するのに使おうと考えています。
重ねてご好意に感謝致します。ありがとうございました。
codeplexの「Download Archive」を押すと巨大Zipが落ちてきます。展開し、「releases」フォルダにある「releaseList.json」ファイルを見るとサイト丸ごとの履歴が分かります。その中で最新のものを探せばいいです
。テキストエディタではつらいので、https://jsoneditoronline.org/に貼り付ければ、簡単に確認できます。
見ていくと、最新のzipは巨大zip\releases\44\以下の5ファイルと分かります。ファイル名はランダムな英数字の羅列(uuid形式?)ですが、先ほどのjsonで当該ファイルのIDと照合し、「元ファイル名.zip」にリネームすれば普通に使えます。