WinActorの拡張機能のつもりで作ってたUIAutomationですが、引数さえ揃ってればスクリプトでも実行できるんじゃねってことで、さっそくVBSめーかーに組み込んでみた。
1.「7-1.アプリケーション操作」として組み込んであるよ
2.クリックすると、メニューはこうなってます。
- 処理名 ⇒ 右側のフローにアイテムとして組み込まれる時のラベル名です。
- 対象アプリ名 ⇒ プロセス名かウィンドウタイトルの一部を使って操作対象アプリを特定します。
- プロパティ ⇒ Name・AutomationIDのどちらかを選択
- プロパティ値 ⇒ 操作対象のName or AutomationIDの値を指定
- 処理内容 ⇒ コントロールに対して行う処理を選択
- クリック
- 選択(フォーカスする)
- テキスト値取得
- テキスト設定
- コンボボックス・リスト選択値取得
- リスト項目・ラジオボタン状態取得
- コンボボックス・リスト・ラジオボタン設定
- チェックボックス取得
- チェックボックス設定
- Nameプロパティ取得
- 設定値 ⇒ 設定系の操作を選択した場合に指定
- コントロール選択オプション ⇒ Next・Previous・FirstChild・LastChildから選択
- 処理結果 ⇒ 取得系の操作を選択した場合に指定
3.UIA_cmd.exeを同梱ZIPをダウンロード
このアクションが含まれる状態でZIPダウンロードするとUIA_cmd.exeとinspect.exeを同梱したZIPファイルが取得できます。
4.スクリプト実行でスムーズに動かすために変更したところ
WinActorからの起動の場合は、「GetUMSWindowHandle(@ウィンドウ識別名@)」を
使えばサクッとウィンドウハンドル取得できたんだけども純粋なvbsだとそうはいかないので、UIA_cmd.exe側でウィンドウハンドルを取得する様に処理を追加した。
具体的には、UIA_cmd.exeの2番目の引数に直接ウィンドウハンドルを指定すればそれでも動くし、2番目引数の先頭に「GetHWND:」を付けることでその後ろの文字列をプロセス名かウィンドウタイトルに含むアプリを対象としてウィンドウハンドルを取得し直す様にした。
VB.net側でのウィンドウハンドル取得処理がこちら。
Private Function GetWindowHandle(part_key As String) As String Dim hwnd As String = part_key For Each p As Process In System.Diagnostics.Process.GetProcesses() If (p.ProcessName Like "*" & part_key & "*") Or (p.MainWindowTitle Like "*" & part_key & "*") Then hwnd = p.MainWindowHandle Exit For End If Next Return hwnd End Function
5.実際にサンプルフォームを操作する例
疲れた・・・寝る。今度、ここに動かし方を整理して書くつもり。