変数でクリックするのにちょうどいい場所を決める
前の手順で作成されたIf文の中にコマンドが入力されるよう、[EndIf]の行を選択しておきます(または、後から移動します)。If文の追加にチェックを忘れてしまった人は、手動で追加しておいてくださいね。
「変数 / アレイ」ボタン(またはShift+F10)を押して「変数」ダイアログを表示します。
- 出力変数: に 「FoundX」
- オペレーターは「:=」
- 式 / アレイ にチェック
- 値: は「FoundX -10」
とします。[Assign Variable]アクションが追加されます。
続けて、もういちど「変数 / アレイ」ボタン(またはShift+F10)を押して「変数」ダイアログを表示します。
今度は、
- 出力変数: 「FoundY」
- オペレーター「:=」
- 式 / アレイ にチェック
- 値: は「FoundY + 20」
とします。
FoundX, FoundYというのは、画像が見つかった場所の左上の「座標」が格納される変数でした。
前の「画像検索」ダイアログで、出力変数を変えていなかったので、見つかった画像の左上の座標が入っているはずです。
クリックしたいのは、真っ白な領域です。そこで、ウィンドウ上の「少し左」「少し下」をクリックしたいとなります。
画面やウィンドウの座標では、「左」はX座標で小さい方、「下」はY座標で大きい方でした(忘れてしまった方は【参考】無料 RPA ツールPMCでマウス操作の自作や座標を学習する)。そこで、FoundXから10ピクセル分マイナス、FoundYから20ピクセル分プラスしたいところをクリックしたいと思います。
そのために書いているのが、「値」の中にある、
- FoundX – 10
- FoundY + 20
です。しかし、プログラム / RPA の世界ではこれだけでは「計算」されただけです。計算したものを利用するには保存する必要があります。
画像検索で「FoundX」「FoundY」に画像が見つかった座標を保存してから、マウスコマンドなどで利用するのと同様になります。
画像検索では「画像の中心に座標を調整」のチェックボックスがあります。その際は、画像の高さと幅の半分を、見つかった座標に足すことで、座標を修正しています(Pulover’s Macro Creator が自動でやっています)。
今回は、その調整を「変数」ダイアログで自動的に行っています。
調整した座標をクリックする
[Assign Variable]を2つ追加したら、今度はその変数を利用して求めた座標をクリックするアクションを追加します。マウスボタン(F2キー)を押して、マウスダイアログを表示し、下図のように設定します。
先ほど[Assign Variable]アクションで調整した座標を利用するために、座標を固定の数値ではなく、%FoundX%, %FoundY%を入力しています。
%で変数名を囲むのは、AutoHotKeyのルールになっています。
上図の例では、NewXという変数に調整後のX座標が格納されます。そのため、マウスアクションでは、Xの中に%NewX%と設定する必要があります。
また、FoundXの中身が上書きされないので再利用することもできます。
プログラムでは、FoundXはあくまでも「見つかった座標」なのだから、変数名を変えるべきという考え方もあります。その方が、間違った変数を使ってしまうことが減る(数字が書き換わっていることに気づかずに使ってしまわない)効果が期待できます。
ただ、今回は RPA であることと、コピー&ペーストでマウスアクションを使い回せた方が手軽であるという理由でこのようにしています。
「テキスト」アクションで保存するフォルダを選ぶ
マウスでフォルダパスを入力するボックスを選択できたら、テキストアクションで編集します。
今回は、
- Ctrl+A, Deleteキーで入力されている内容を削除する
- 保存したいフォルダのパスをクリップボード経由で入力する
- Enterキーでフォルダを移動する
という3ステップを一気に作成していきます。
まずは、「テキスト」ボタン(F3キー)を押して、テキストダイアログを表示します。
設定は
- 送信するテキストは「^a{Delete}」
- 送信モードは「コマンドを記述したテキスト」
とします。
復習となりますが、「コマンドを記述したテキスト」による送信モードでは、一部の文字がコマンドとして認識され、ただの文字ではなくコマンドとして解釈されるようになります。
ここでは、^がCtrl, aで「Ctrl+A」、続けて{Delete}でDeleteキーを押したことになります。
元々入力されていたフォルダのパスを削除しています。
さらにテキストアクションを追加します。
ここでは、保存したいフォルダを入力したいので、テキストボックスには希望するパスを入力します。送信モードは「クリップボードから貼り付け」とすることで、どこからかCtrl+Cでコピーしてきて、Ctrl+Vで貼り付けたような動作をウィンドウの切り替えや、コピー元のテキストなしで実行することができます。
また、通常では、Ctrl+Vや右クリックしてからのコンテキストメニューでもペーストできないコントロールでも、この方法でテキストを入力できることがあります。
もちろん、ここで保存するパスは、みなさんの環境にあわせて調整するようにしてください。筆者は、myPMCフォルダに Pulover’s Macro Creator のファイルをまとめて保存しているので、さらに「working」フォルダを作成して、そこに途中保存するファイルの類をまとめるようにしています。
「OK」ボタンでテキストアクションを追加したら、さらにさらに、もう1つテキストアクションを追加します。
今度追加するのは、Enterキーを送信するだけのアクションですので、1つめと同様に、「コマンドを記述したテキスト」、内容は「{Enter}」となります。かんたんですね。
実際に名前をつけて保存する
ここまででCSVファイルの保存先・ファイル名の入力ができました。さらに、今回はControlコマンドを利用して、以前作成した「名前をつけて保存」で上書き確認がでても出なくても、きちんと動作するRPAをアップグレードしてみようと思います。
「上書き保存の確認」ダイアログが出てもでなくてもスムーズに進む RPA の復習は、以下のページからできます。
では、[EndIf]の後から作業を続けて行きます。マウスボタン(F2)を押して、マウスダイアログを表示します。
設定ですが、
- アクション:クリック
- ボタン:左、ノーマル
と標準的な状態にしますが、「座標」は操作しません。
代わりに、右下の「コントロール」にチェックを入れます。そして、WinTitleボタンをクリックし、Title, Class, Processにチェックが付いた状態にします(ここまで通しで作業している方は、そうなっているはずです)。
そして、上側の「…」ボタンをクリックし、名前をつけて保存ダイアログの「保存」ボタンを右クリックして選択します。すると、上側のテキストボックスには「Button6」、下側のテキストボックスには「名前を付けて保存 ahk_class #32770 ahk_exe soffice.bin」と入力されます。もし、上側だけで下側が入力されなければ、下側の「…」ボタンから改めて「名前を付けて保存」ダイアログを指定するか、コピー&ペーストで入力してください。
この後、動作を安定させるため、お好みで300ミリ秒~1秒くらいの「一時停止」を追加でいれると誤動作が防ぎやすいです。
「名前を付けて保存」ダイアログでは、上書き時に確認のダイアログ(メッセージ)が表示される場合があります。そのため、If文で「名前を付けて保存の確認」ダイアログが表示されていないか確認をします。
If文ボタン(F6キー)をクリックし、If文ダイアログを表示します。
上図のように設定して追加します。
さらに、IfWindow Activeと[EndIf]の間に、テキスト(F3キー)のSendRawモードでyキーの送信と、ウィンドウ(F6キー)のWinWaitNotActiveアクションで、「名前を付けて保存の確認」ダイアログが非アクティブに待つアクションを追加します(下図)。
さらに、[EndIf]の後に、「ウィンドウ」ボタン(F6キー)を押して、WinWaitNotActiveアクションをもうひとつ追加します。
上図のように「名前を付けて保存」ダイアログが非アクティブになるのを待ちます。この後に表示されるダイアログはPCの処理速度によって変化しますので、お好みで500ミリ秒~1秒ほどのSleepアクションを入れるといいでしょう。この手順を忘れてしまった方は、以前(第6回)を参考にしてください。
今回は、If文で「名前を付けて保存の確認」が非アクティブになったことを確認してから、改めて「名前を付けて保存」が非アクティブになっていることを確認しています。
なぜかというと、 Pulover’s Macro Creator でのウィンドウタイトルの検索方法が標準では前方一致だからです。
前方一致というのは、文字の意味からなんとなく分かるかと思いますが、「文字列の前の方が同じなら、同じだと見做す」ということになります。どういうことかというと、
「ごはん」で検索した場合、「ごはん」が一致したと判断されるのはもちろん、「ごはんとおかず」も一致したと判断されます。一方で、「晩ごはん」は一致したとみなされません。逆に、「ごはんとおかず」で検索した場合、「ごはん」は一致したとみなされず、ここでの例では「ごはんとおかず」しか一致したと見做されません。
WinTitleに戻ると、「名前を付けて保存」で検索した場合には「名前を付けて保存の確認」も、先頭が「名前を付けて保存」なので一致したと見做されてしまい、期待した動作をしません。
そこで、判定の順番を変えています。
なお、TitleMatchMode(タイトルマッチモード)というオプションがあり、これを切り替えることで完全に一致していないと一致したと見做されないようにすることもできます。
ただし、これはこれで全体的な設定になってしまうため、他のテクニックで回避できるなら回避した方が、 RPA のアクションを追うだけで理解できるので、筆者はこのように記載しています。