【PMC & AHK】変数を使ってマクロを更に便利に

皆さんこんにちは! 楽してますか?

さて、先日は実例と共に簡単な半自動化の例をご紹介しましたが、これを実際に使ってみるとちょっとだけ使い勝手が悪いというか、操作にもたつく点がありました。

そこを改善してみたいと思います。

なんとなくもたつく原因、それは?

それは、操作開始(マクロスタート)時と終了時で、マウスカーソルの位置が変わってしまうからです!

繰り返しになりますが、Auto Hot KeyやそれをベースにしたPulover’s Macro Creatorは基本的には人間の操作をシミュレートして再現するツールです。

そのため、分かりやすくてプログラマーでない人でも簡単なソフトくらいの機能まで作り込めたりします。

逆に、人間が操作しているのと同じ事をするため、同時に人間が操作するとおかしなことになったり、マクロの操作で色々な状態が(人間が触ってないのに)変わってしまう場合があるということになります。

ここで、前回マクロにやらせた操作を振り返ってみます。

まずは、左側のリンクのリストから(人間が)一つを選択してクリックし、

続いて、正規表現を使って「」括弧の中身を抜き出して表計算ソフトにコピペしました。

最後に、

URLもコピーして表計算ソフトにコピペして終了です。

実際には、最初に戻って人間が自分の操作と判断でまた別のメニューをクリックして、マクロを動作させます。

そう、人間は「メニューから必要なものを選んでクリック」することだけをやればいいのですが、URLのコピーのため、マクロでマウスカーソルを動かしているので、メニューから次のメニューへカーソルを動かすよりも大きな動作が必要になってしまいます。

それどころか、自分がマウスを操作していないのにマウスカーソルが動いているので、咄嗟にどこにカーソルがあるのか分からなくて混乱してしまうという問題が起きているのです。

「そのくらい我慢できる」と侮ることなかれ、こういった小さなストレスが仕事の効率をボディブローのようにじわじわと奪っていくことがよくあるのです。

また、マクロ組んだ際などは特に「それでも使わないよりは楽だし……」とついつい自分を納得させてしまって、不便があることに気付かなかったりします。

なので、皆さんもマクロを使ってみて「なんか変だな?」と思ったら、マクロの使用前後でマウスカーソルの位置が大きく変わっていないか、アプリケーションの状態が大きく変わっていないか、などをチェックしてみるといいでしょう。

また、逆に「次に行いたい作業」が決まっている場合には、「次に行う作業の下準備」までマクロに含めてしまうというのも一つの手段です。

 

対策:マウスカーソルを元に戻してあげよう

さて、今回の対策は楽です。マウスカーソルの位置が変わっていて大きく動かさないといけないのと、最後に自分が操作した位置と大きく変わっているのでマウスカーソルを見失うのが問題であれば、そう、元に戻してあげればいいだけです。

そのためには、前回も出て来ました「変数」と「関数」を使えば実現できます。前回は実践サンプルだったので駆け足ですが、今回はせっかくなのでじっくりやってみましょう。

 

マクロ実行時のカーソルの位置を記録しておく

イメージとしては、変数というホワイトボードに「X座標」「Y座標」の数字を書いておくようなものです。ただ、ホワイトボード「変数」は一度に1つの数字しかかけないので、「X座標」と「Y座標」を別々のホワイトボードに記録します。

Pulover’s Macro Creatorの場合

変数の追加の仕方は前回やりましたね。

img_55c4c09d31db2

コマンドメニューから、変数(Shift+F10)で、

img_55c4cec42c448

出力する変数と、その値、オペレータを選択するんでした。

ただ、今回はこの方法は使いません。

というのも、今回のマウスの座標(情報)というのは、最低限、x座標、y座標(あるいはアクティブなウィンドウの情報)などといった、複数の情報を一緒に使うからです。

そこで、マウスの情報を取得するコマンドをまず使用します。

今回のコマンドは、いわゆる操作の記録じゃないので、入力がちょっと面倒です。

コマンド→ファイル/文字列/その他 を実行します(F8)から、

MouseGetPos

を選択するか(ドロップダウンを開いた状態でmキーを押すとすぐに選択出来ます)、

コマンド→コマンドを検索する(Shitf+Ctrl+F)で、「MouseGetPos」を選択します。

すると、コマンド選択の下がこの様に変化しますので、

OutputVarXに、「マウスのX座標を入れておく変数(ホワイトボード)の名前を。

同じく、OutputVarYには、「マウスのY座標を入れておく場所」の名前、OutputVarWinには、「アクティブなウィンドウがどれかを入れておく場所」の名前を入力します。

今回は、

  • myMouseX
  • myMouseY
  • myActiveWin

とします。何故頭に「my」を付けたかというと、Pulover’s Macro CreatorやAutoHotKeyに最初から用意されている変数やコマンドの名前と混乱しないようにです。

もし同じ名前をつけてしまうと、動作しないだけならともかく、おかしな動きになってしまうこともあります。

コマンドを追加したら、今度は「一時停止(Wait)」を入れましょう。今回は変数の動きを理解するのが目的なので、マクロを起動したら、起動した状態を覚えておいて、1秒の間自由に動かしてから元に戻す、ということをしてみます。

F5キーを押して、自由な待ち時間(筆者はせっかちなので1秒)を設定します。

設定するとこんな感じになります。

では、復元をしてみましょう。

復元

復元には複数のコマンドを使います。

まず、ほとんど全てのマクロで使ってきた、WinActivateを使います。

ただ、ちょっとコツが必要で、アクティブなウィンドウを指示する「WinTitle, WinText…」の項目に、

ahk_id %ActiveWin%」と入力する必要があります(間に半角スペース一つ)。

何故かというと、WinActivateコマンドはウィンドウのタイトルなど色々な情報でアクティブにするウィンドウを指定できますが、今回、MouseGetPosコマンドでmyActiveWin変数に書き込まれた情報は、「タイトルではなく、ID」なので、「これはIDですよー」っと教えてあげるために、「ahk_id 」と、IDの前に書く必要があります。

TitleとIDの違いなどは、「WinTitle, WinText, ExcludeTitle, ExcludeText」の隣にある、ドロップダウンをTitleやID, それ以外に変えて、「…」ボタンで色々なウィンドウを指定するとなんとなく分かるかと思います。

その使い分けなんかは、またちょっと別の話になるので、いずれ別記事を起こしたいと思います。

 

さて、ウィンドウを元に戻せたので、次はマウスの座標を戻したいと思います。

「コマンド→マウス(F2)」、またはマウスアイコンなどをクリックして、マウス用ダイアログを表示します。

そして、

  • アクションを「移動」に(もちろん、クリックしたいときはクリックを選択します)
  • 座標の中のXに「%myMouseX%」を入力
  • 座標の中のYに「%myMouseY%」を入力

します。

こちらは、WinActivateと違って、座標の表し方の指示などはないので(せいぜい、アクションの「移動」の選択が、ahk_idなどに相当するでしょうか?)、変数の名前を%で囲むことに気をつけるくらいです。

それでは、実際に動かして、マウスを動かしたりウィンドウを切り替えたりして、「マクロ開始時の状態に戻る」ことを確認してみてください。

これで、色々マウスを動かしたマクロを動作した後も、違和感なく操作を続けられるようになると思います(もちろん、今回は自分の操作がキャンセルされるので違和感しかないですが)。

Auto Hot Keyの場合

今回は、正直コマンドの検索くらいしかPulover’s Macro Creatorの機能を利用していないので、AHKでも余り変わりありません。

なので、PMCのところも読んで下さってる方は、AHKにエクスポートしていただくと、自分の設定が見られてより分かりやすいかと思います(実際に何を行っているかは、そちらに書いているのでAHKのスクリプトだけが見たい方も、流し読みしていただけると助かります)。

F4::
Macro1:
MouseGetPos, myMouseX, myMouseY, myActiveWin
Sleep, 1000
WinActivate, ahk_id %myActiveWin%
Sleep, 333
Click, %myMouseX%, %myMouseY%, 0
Return

こちらが、筆者が作ったマクロを書き出したものです(Sleepだけ調整しています)。

まず、MouseGetPosコマンドですが、これはマウスの情報を色々な変数(入れ物)に分けて書き込んでくれる素敵なコマンドです。今回は、マウスの座標だけではなく、アクティブなウィンドウも取得してウィンドウも復帰出来るようにします。

コンマで区切って順番に「マウスのX座標を入れておく所、マウスのY座標を入れておく所、ウィンドウの情報を入れておく所」(変数)を指定します。

AHKでもMacro Creatorでも、いきなり変数が出て来た場合、それまで使われてなかったら自動で新しい変数を作ってくれます。

便利な半面、ちょっとのスペルミスで何故か動かない、ということがあるので気をつけてください。

続いて、WinActivateですが、myActiveWin変数に入っている情報は、ウィンドウのID情報であると指示するために%myActiveWin%の前に「ahk_id 」(最後に半角スペースを入力して区切る)を入れてあげる必要があります。

最後に、「Click」ですが、実はクリックする回数をゼロにしてあげると、クリックしないで「移動だけを行う」ことができます。

このようにすることで、マクロ開始直後にマウス、アクティブなウィンドウを一時的に変数という入れ物に保存しておいて、後から読み出す、ということができるようになります。

最後に

blogを書く時間もなかなか取れない日々が続いてしまって、Pulover’s Macro Creatorで色々やってみたい! という方には申し訳ないことをしました……。

今回出て来た、変数を複数に分けて書き込まなければいけない理由(セットでいいじゃない)や、ahk_idが必要な理由(というか、変数に保存するのは何故タイトルじゃなくてIDだったの?)などなど、はじめは分かりづらいことが多いかと思いますが、そういうところが分かってくると、変数を使ってより柔軟なマクロが作れるようになるので、いずれそれも解説していきたいと思います。

それでは!

Facebooktwittergoogle_plusredditpinterestlinkedinmail

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です