【コラム】ダイアログ(メッセージボックス)の内容を取得する方法
お世話になっております。
WinActorのシナリオ作成時、「このメッセージが表示されたときはこうして、そうでないときはこうして…」という処理を作ることは多いです。
メッセージを表示する媒体は様々ですが、今回はダイアログで表示されたメッセージを取得するためにこちらで使っているフローを連携したいと思います。
(ざっくり検索してフォーラムにはなさそうだったので上げましたが、既出でしたらすみません!)
(WinActor v6.3.0で動作確認しています。)
■■■■■■
ここで扱う「ダイアログ」とは、下記のようなメッセージのことです。
「ウィンドウ識別ルール」でつかみに行った場合「ウィンドウクラス名」が「#32770」となっているものです。
(クラス名についてはウィンドウクラスについて も参照)
このダイアログは、「ウィンドウを1クリックしてCtrl+Cでコピーすると、内容がクリップボードに保存される」ことで内容を取得することができます。
手動でもできるので、一度お試しください。
※ダイアログは適当なVBSファイルを作成、「Msgbox "本文",vbOKOnly,"タイトル"」等と記述してファイルをクリックすれば、簡単に表示できます。
つまり、「クリップボード」ノードと「エミュレーション」を組み合わせれば、WinActorシナリオ上でも同じように取得できるということです。
■■■■■■
まず、タイトルやどのプロセスから実行されたダイアログでも取得可能にするために、ウィンドウ識別ルールを「ウィンドウクラス名」以外は「指定しない」にして保存しておきます。
(ウィンドウ識別名はお好きなものでOK)
試しに、このようなシナリオを作ってみました。
実行結果はこちら(ダイアログはあらかじめ表示しておいてからシナリオを実行しています。)
エミュレーションの設定はこうしています。(ウィンドウをクリックしてからCtrl+C)
※マウス左クリックの座標が(50,50)なのは、だいたいこの位置ならどのサイズでもウィンドウをクリックできるだろうと指定しているだけなので、場合によっては臨機応変に変更してくださってOKです。
※クリップボードをエミュレーション前に初期化する(値を設定で「値⇒」としている)のは、ダイアログが表示されておらずスルーされた場合に、クリップボードの内容が前のまま残っていたりするのを防ぐためです。
取得された値はクリップボードに入っているので、
- 「25_WinActorノート」の「クリップボードから読み込み.ums6」で読み込んで処理
- クリップボードから変数に取得し「06_文字列比較」の「部分一致比較.ums6」で特定の文字列と一致するかチェック
など、色々と扱うことができます。
また、ウィンドウ識別ルールでダイアログそのものを登録しているので、
- エミュレーションでウィンドウ識別名をダイアログに指定、Enterを押すことで確実にダイアログだけを閉じられる
- 「11_ウィンドウ関連」の「ウィンドウを閉じる.ums6」を使用する
- 「04_自動記録アクション」の「クリック(WIN32).ums6」で指定のボタンを押下する
など、ダイアログウィンドウの処理の幅も広がります。
以前のシナリオでは画像マッチングを使用してダイアログの内容を判定しており、端末による解像度の違い、メッセージ内容が更新になった際の画像の再指定などが面倒でしたが、
これは文字列としてメッセージ内容を取得できるので、シナリオ上での処理がぐっと楽になりました。
ご存知の方はもちろんたくさんいらっしゃるでしょうが、最近WinActorを始めて、ダイアログの処理にちょっと戸惑った、という方の参考になれば幸いです。