ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

Facebook メッセンジャーの入力ボックスを画像探索させてクリックしてフォーカスを移動させる【AutoHotkey】。

f:id:yasushiito:20190403184928p:plain

時々出くわす問題。

Facebook メッセンジャーに音声入力テキストをコピペで流すスクリプトを便利に使っています。
ところが時々入力フォーカスを見失ってコピペに失敗することがあります。
どうも相手からメッセージを受け取ると入力フォーカスがどこかに行ってしまうようです。
キーボードショートカットだけでここから復旧させるのは難しい。
そこで最近覚えた画像探索で入力ボックスを見つけ出してマウスクリックで強制的に入力フォーカスをうつしてしまおうと考えました。

計画する。

メッセージを入力する入力ボックスの特徴的な部分を探してみますと、薄いグレーでメッセージを入力と表示されていることに気づきます。
ここをクリックすれば間違いなく入力状態にはできます。
そこでこの部分の画像をスクリーンショットから切り抜きます。
画像の保存形式は BMP です。

f:id:yasushiito:20190619161003j:plain

なんだよこの中途半端に見切れた画像は!
その理由は後ほど。

処理についてはこれまでと同様です。
ブラウザをアクティブにして、アクティブウインドウのサイズを取得します。
アクティブウィンドウの範囲内で目的の画像を探索させて、ヒットしたなら相対座標でマウスポインタを移動させてクリックします。
見つからなかったら無理に解決しようとせずに、そのまま続行させます。
こんな処理をペースト処理の手前に挿入します。
ただし、画像認識は環境が変わると失敗することが多く不安定要素になるので必要な時だけトライするようにしておきます。
探索したい画像が存在する時だけトライするようにしておきましょうか。

実装する。

ほとんどコピペで済みました。
'メッセージを入力'という表示の色合いが淡いので色の誤差を少なめにしました。
画像を保存するためのディレクトリを用意したのでスクリプトディレクトリからの相対パスで指定します。
座標系はアクティブウィンドウからの距離に設定することを忘れずに。
こんなもんでしょうか。

いえいえこんなものではすみません。
一度動いたように見えましたが、何回か繰り返すと失敗するケースがあることに気づきます。
後ほど説明するとあったあれですね。
入力ボックスの左端に入力カーソルがチカチカしているんですけど、こいつのせいで画像探索に失敗してるんですね。
メッセージを入力というテキスト全体を生真面目に切り抜くと、こんな目にあいます。
画像探索全体に言えることですが、見つかった画像の左上の座標を返してくるので、あんまりギリギリいっぱいを攻めるとマウスクリックに失敗します。
探索画像の切り抜きは適当なくらいがちょうど良いかと思われます。

この記事に登場するAutohotkey スクリプトについて

この記事の中で私が作成したプログラムは、全て自由に使うことができます。
詳しくはこちら