
画像ファイルやPDFファイルの中の文字をOCR機能で抽出する製品「AI JIMY Paperbot」の操作を、Automation Anywhere A360を使って自動化する方法の操作フローに倣って、PowerShellで自動化する方法を試してみたので紹介します。
このページで紹介するのは、仕分処理・文字認識処理が完了したときに表示するメッセージボックスを待つ処理の実装方法です。
【注】
PowerShellでWindowsアプリの操作を自動化する方法としては、UI Automation PowerShell Extensionsを利用しています。UI Automation PowerShell Extensionsについては、こちらを参照してください。
■操作対象
下記メッセージボックスが表示するのを待ちます。

■スクリプト
Import-Module C:\UIAutomation\UIAutomation.0.8.7B3.NET35\UIAutomation.dll #============================================================== #メッセージボックスの表示を待つ■実装内容の説明
#【引数】
# $criteria:オブジェクトの存在確認に使う検索条件(メッセージ文言)
# $timeout:オブジェクトの存在確認をリトライする最大時間(秒) #============================================================== function waitMsgbox($criteria, $timeout){
#存在確認のリトライ間隔を2秒とする。 $SLEEPTIME = 2
#関数の結果を「TimeOut」に初期化する。 $rtn = "TimeOut" for( $t=$timeout; $t -gt 0; $t=$t-$SLEEPTIME ){ #メインウィンドウ オブジェクトを取得する。 $w = Get-UiaWindow -Name 'AI JIMY Paperbot'
#モーダルウィンドウでブロックされた状態になっているか? if( $w.WindowInteractionState -eq "BlockedByModalWindow" ){
#メッセージボックスウィンドウ オブジェクトを取得する。 $m = Get-UiaWindow -Class '#32770' -Name 'AI JIMY Paperbot' #メッセージ内容が待っていた内容かチェックする。 $chk = $m | Test-UIAControlState -SearchCriteria $criteria if( $chk -eq $true ){ $rtn = "OK" }else{ $rtn = "NG" } #[OK]ボタンをクリックする。 $m | Get-UiaButton -Name 'OK' | Invoke-UiaControlClick | Out-Null #待機を終了する。 break }else{ start-sleep -s $SLEEPTIME continue } } return $rtn } #[文字認識処理完了]メッセージボックスを待つ $rtn = waitMsgbox @{Name='文字認識処理が完了しました'} 60
(1)モーダルウィンドウでブロックされた状態かの判定
$w.WindowInteractionState の値を調べてみると、
メッセージボックスが表示してないときは、「ReadyForUserInteraction」
メッセージボックスが表示中のときは、「BlockedByModalWindow」
となっていることが分かりました。
このことを利用して、メッセージボックスが表示中か否かを $w.WindowInteractionState で判定しています。
(2)メッセージボックスウィンドウ オブジェクトの取得
メッセージ内容が待っていた内容かチェックする処理
Test-UIAControlState -SearchCriteria $criteria
では、メインウィンドウ オブジェクト $w ではなく、メッセージボックスウィンドウ オブジェクト $m に対して実行しています。
$w | Test-UIAControlState -SearchCriteria @{Name='文字認識処理が完了しました'}
として $w に対して実行した場合では、結果が返ってくるまで約15秒掛かりましたが、
$m = Get-UiaWindow -Class '#32770' -Name 'AI JIMY Paperbot'
$m | Test-UIAControlState -SearchCriteria @{Name='文字認識処理が完了しました'}
として $m に対して実行した場合は、結果が即時に返ってきました。
この結果を基に、メッセージボックスウィンドウ オブジェクトを取得して、メッセージ内容が待っていた内容かチェックする処理に使っています。
■操作対象のオブジェクトの調べ方
操作対象のオブジェクトのNameとかAutomationIdを知るためのオブジェクト解析ツール「UIAutomationSpy」の使い方は、こちらです。
■その他の操作
[実行]ボタンをクリックする処理の実装方法は、こちらです。
コメント
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。