ぺんちゃん日記

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

Autohotkey で音声入力モードに切り替えるスクリプトのデバッグ

先日、 Google Chrome で開いている文書ファイルを探してマイクをつけるスクリプトを書きました
このスクリプトにはいくつかの問題があったのでした。

一つは音声入力用のタブが開いていない状況で永久に Chrome のタブ切り替えショートカットキーを送信し続けるのでありました。
もう一つは Chrome が複数起動している場合に期待するウィンドウ選択できない可能性があることでした。
これらの問題は運用でカバーできなくもありません。
起動する Google Chromeは必ず一つで 、ターゲットとなる文書を開いていること。
自分で使っている限りは気をつけていれば問題ないのですが…。
一点目の問題の無限タブ切り替えは状況によってはブラウザ操作不能になってとってもうざい現象が発生してしまうのでそこだけは直したいです 。
いきなりですが修正したコードがこちら。

Process,Exist,chrome.exe
If (ErrorLevel <> 0 ) {
    WinActivate,ahk_pid %ErrorLevel%
        WinGetActiveTitle, current
    msgbox %current%
    IfWinExist,音声入力用
    {
        Send,+^s
    }
    Else
    {
        WinGetActiveTitle, current
        Loop
        {
            Send,^{Tab}
            Sleep 500
            IfWinExist,音声入力用
            {
                Send,+^s
                break
            }
            WinGetActiveTitle, active
            if current = %active%
            {
              break
            }
        }
    }
}
Else
{
    ExitApp
}

ループ処理の中が少し変わっていますね。
Google Chrome をアクティブにしたら、最初に選択しているタブのタイトル名を覚えておいて、再度そのタブが回ってきたら一周したと判断して縦断する処理を入れます。
かなりレアケースで同じページを複数開いていると判定を誤るのですが完璧を求めるほどでもありません。
2点目の問題は運用でカバーするかな。
複数のアカウントを切り替えながら使っている場合、 Google Chrome が1枚しか立ち上がっていないにも関わらず期待する動作をしないことがあります。
これは別のアカウントで開いている Google Chromeをつかんでしまって ウィンドウ ID を正確に取得できないのが原因のようです。
Google Chrome は常駐しているのでプロセス名による判定では判別がつかないのですね。
アカウントは切り替えではなくサインアウトしてから別アカウントにサインインしなければなりませんね 。

追記。
Google Chrome が複数起動しているケースにも対応しました。
yasushiito.hatenablog.com