ぺんちゃん日記

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

ウィンドウサイズをアジャストした時に必須ウインドウを開くようにする【AutoHotkey】。

f:id:yasushiito:20190403184928p:plain

開いてないと困る。

音声入力documentなどのように開いていることが前提のウィンドウがあります。
これが開いていないと音声入力ができない。
作業ウィンドウが開いていないと Google 検索すらできない。

ということで、音声入力ウインドウと作業ウインドウを確実に判定できるように変更できたのでした。
そこで、判定の結果それらのウィンドウが見つからなかった場合に起動できるように修正しようと思います。
さしあたってはウィンドウサイズをアジャストした時に行うことにします。

どうやって実現するか。

Chrome のウィンドウのすべてのタブを URL でチェックします。
音声入力文書を開いているクロームが音声入力エディタ、ネタを書き貯める文章を開いている Chrome は作業ウィンドウとします。
これらのページが開いていなければ新規ウインドウでクロームを起動します。


作業用文書のページの URL はコンフィグでwork urlとして記憶できるようにして、グローバル変数に読み込んでおくことにします。

コマンドラインからクロームを起動しますが、Chrome の起動オプションに URL を渡せば、該当 URL を開いてくれます。
ただし、すでに Chrome が起動している場合は、既存の Chrome で新しいタブで開いてしまいます。
新しいウインドウで開きたい場合は、起動オプションに--new-windowを与えます。

browser := "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
Run , %browser% --new-window

特定のページセットが開かない?

ところで作業ウィンドウであることを決定づける文書です。
これは Chrome を起動した時に初期ページとして開かれるタブ、 Chrome の設定でいう特定のページセットの中に含まれています。
つまり、 Chrome を普通に起動すれば作業文書も同時に開かれるので自動的にそれが作業ウィンドウとなります。
しかし、起動オプション URL を与えてしまうと、 URL で与えたページだけが開かれて起動します。

起動オプションに「初期起動として特定のページセットを開く」みたいな機能があればと探してみましたが、ちょっと見つかりません。
かといってこれらのページはスクリプトの中に埋め込むのは嫌です。

Chrome を弄り回していると、全てのウインドウが閉じられていて1枚目の ウィンドウ開く時に URL を与えなければ、初期ページを開いて起動してくれることがわかりました。
まあ当たり前ですわね。
いつもこうやって Chrome を起動しているのですから。

ということで、開いている Chrome の数を調べて、1枚も開いていなかったら、 URL は与えないで初期ページを起動してもらうことにします。
既に何らかの Chrome が開いてしまっている時は、作業用文書を起動オプションに与えて開いてもらいます。
開いている Chrome を強制的に閉じてしまえば、 初期ページを開いてくれます。
もし大事なウィンドウを勝手に閉じてしまったら大惨事なので、その作戦は却下です。

なお、 Chrome のプロセスは常駐しているので、スクリーン上に一枚も Chrome が見当たらなくても裏ではいくつかのプロセスが待機しています。
Chrome のプロセスの存在をチェックする形では判定できません。

出来上がったコード。

こんな感じに組み上がりました。
作業ウインドウを探す関数が起動中の Chrome の数を返すという謎の仕様になっているのが気になります。
もっとうまい方法がありそうなんだけど?

音声入力ウインドウの存在確認を先にしてしまうと、最低でも1枚は Chrome が起動してしまうので作業ウインドウが見つからない場合の起動処理は期待通りになりません。
作業ウィンドウの存在確認を最初にすべきです。

Chrome 起動時には読み込みに相当の時間がかかります。
十分にスリープタイムを用意しておきました。
タブの探索の時間も含めて、のんびりしたスクリプトになりましたね。

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

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