ここ数日PowerShellのライブラリ、UIAutomationを使ってアプリケーション操作自動化について記事を作成しました。
ボタンばかりのアプリケーションであれば十分ですが、実際には右クリックしてコンテキストメニューを選択したり、パスワードやファイルパス指定のため文字列の入力と、クリック以外の動作をさせたい場合も出てきます。
またデフォルトの状態ではUIAutomationによってアプリケーションに赤枠が表示されたりしますので、解決方法についてまとめてみます。
UIAutomationの赤枠を非表示にする。
電卓での実験でもそうでしたが、デフォルトの状態ではスクリプトの実行中にアプリケーションに赤色の枠が表示されています。
フォーカスがどこにあるかなどを知りたい場合などは役に立つかもしれませんが、普段は煩わしいのではないでしょうか。
一文で非表示にすることができるので、インポート後あたりに次の文を追加すると非表示にすることができます。
1 |
[UIAutomation.Preferences]::Highlight = $false |
アプリケーションに文字を入力する
自動化したいアプリケーションがパスワードの入力を要求したり、特定のファイルを開きたい( = フルパスを指定したい )場合など文字列の入力が必要になります。
いくつか方法がありますが、単純な方法では以下の文が一番使いやすい気がします。
1 2 |
$window = Get-UiaWindow -Name 'application_name' $window.Keyboard.TypeText("Hello World!") |
他にもSendKeyやSendWaitなどで入力することも可能ですが、私が実際に使用したテストではアプリケーションのダイアログにエラーが発生してしまいました。
上記に変更したところ改善できたので、SendKeyやSendWaitを使っていて問題があった場合にはKeyborad.TypeTextに変更してみてはどうでしょうか。
スクリプトにコメントを挿入する。
普段のプログラミングと同様にスクリプトにもコメントを挿入したいときは多いはずです。
自分だけでなく、他の人も見るのであれば必須とすら言えます。
コメントは「#」の後に記述します。
1 2 |
# UIAutomationの赤枠非表示 [UIAutomation.Preferences]::Highlight = $false |
アプリケーションの右クリックメニューを操作する
正直もっといい方法がある気がするのですが…。
UIAutomationSpyでは右クリックメニューのAutomationId/Nameしか情報を得られないので少し面倒です。
一部分ではなく、メモ帳を例にスクリプトを記述します。
コピー処理は省いているので何か簡単に文字列をコピーして動かしてみてくださいネ。
1 2 3 4 5 6 7 8 9 10 |
Import-Module .\Modules\UIAutomation\UIAutomation.dll [UIAutomation.Preferences]::Highlight = $false $process = Start-Process notepad -PassThru $window = Get-UiaWindow -ProcessId $process.Id # テキスト入力エリアでコンテキストメニューを表示し、コンテキストメニューを取得する。 $elements = $window | Get-UiaDocument -AutomationId '15' | Invoke-UiaControlContextMenu # コンテキストメニュー内の貼り付け(Item 770)をクリックする。 $elements | Get-UiaMenuItem -AutomationId 'Item 770' | Invoke-UiaMenuItemClick | Out-Null |
まとめ
UIAutomationの基本的な使い方などはブログなどでもよく紹介されていますが、いざ何かやってみようと思うとうまく情報を探せないことも多いです。
実際にいろいろ使ってみて理解を深めることが大切と実感します。
何かチャンスがあればPowerShellでできないか、と少しでも頭をよぎるようになればいいですよね。