ぺんちゃん日記

食と歴史と 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

【Windows 10】ロック画面に常時スクリーンキーボードを表示するには

ロック画面(サインインのためにパスワードを入力する画面)ではスクリーンキーボードを表示することができます。
右下のアイコンをクリックすれば表示できます。
私などはスクリーンキーボードなしにはサインインもできないので毎回メニューを開いて表示するのは非常に手間になります。
必須な機能なので常時表示でも良いのですけどね。
PC を初めてセットアップする時にそれを設定するのですが、何かの拍子にリセットされて表示してくれなくになることがあります。
そして、どこでその設定を行ったのか覚えていない……。
今日もそんな目に遭いました。
しかもググっても答えが出てこない。
自力解決できたので今後のためにメモしたいと思います 。

サインインしたらスクリーンキーボードを起動させてオプションを開くと 「サインインスクリーンキーボードを開始するかを指定」と下の方に表示されているのでクリックします。

f:id:yasushiito:20190318154833p:plain
f:id:yasushiito:20190318154857p:plain

キーボードの設定が開いて「スクリーンキーボードを使用します」のチェックをつけます。

f:id:yasushiito:20190318154935p:plain

スタートメニューを壊してしまった!?

先日Autohotkey 音声入力のマイクをオンにするスクリプトを書きました。
これにはちょっと目論見がありまして、コルタナからスクリプトを起動すればハンズフリーで入力作業ができるのではないかと考えたからです。
体がしんどかったり手がうまく動かなかったりする日もありますからね。
Google documentの音声入力は修正作業ができませんから、きっちりした文章は書けませんけどね。
思いついたことをストックできるだけでもオッケーオッケーです。

そこでコルタナからアプリケーションを起動する方法を調べてみました。

www.windowscentral.com

特定の場所にショートカットを作成すれば良いのですね。
バッチファイルを起動すれば複雑な操作もできるでしょう。

試しにショートカットを作成してコルタナに頼んでみましたが Microsoft Edge による Web検索 が実行されてしまいます。
様々なアプリを起動してみましたが失敗するパターンが非常に多いですね。
おかしいな。
以前使った時はいろんなアプリが起動できて楽しかった記憶があるのですが……。

実はアプリ起動がうまくいかなくて、すでに二日間を溶かしてしまっています。
Google 先生に相談してあの手この手を試してみましたが全部ダメ。

blogs.yahoo.co.jp
togetter.com

こちらの記事を読みながらスタートメニューにはユーザー全体とユーザー個人の2種類があることに気づかされました。

www.nishishi.com

別のアカウントで試せば動くんじゃない?

恐る恐る別のアカウントでサインインして様々なアプリをコルタナ経由で起動してみました。
するとほとんどのアプリを起動できることがわかりました。
あれこれと弄り回しているうちにスタートメニューを壊してしまったのかもしれませんね。
秀丸Visual Studio Code など確実に起動してくれるアプリもあるのですが…。
可能であれば修復したいのだけどできるかな?
アカウントの引っ越しで解決してもいいのだけど、そちらもヘタにいじって壊すかも。

今日の作業はここまでにします 。

Chrome 上の Google Docの音声入力をオートホットキーでオンにする

今日も Auto HOT key のお勉強です。
ちょっとやってみたいのが音声入力環境の向上。
私は普段 Google Docの音声入力を利用して文章を書いています。

f:id:yasushiito:20190316185600p:plain

多くの人はここに amivoiceなどの 音声入力ソフトを使うかと思います。

エムシーツー 音声認識ソフト AmiVoice SP2 USBマイク付

エムシーツー 音声認識ソフト AmiVoice SP2 USBマイク付

私の場合は Google Docです。
句読点が打てない、修正できない、自分用に学習させられないなどの致命的と思われる問題点がありながらも無料の割には便利だからという理由で使い続けています。
インターネットによるデータ収集& AI による学習という将来面に期待しているところもあります 。

Google Docは マイクの聞き取りは一定期間無音でいると切断されます。
マイクボタンをクリックしてスタンバイにするのが結構面倒くさい。
何か発信したいと思いついても素早く入力に取り掛かれません。
そこで Auto HOT Key から Google Chrome をアクティブにして音声入力用のdocumentにうつってマイクをオンにする作業を自動化したいと思います。

私は普段の作業は音声入力用というファイル名のdocument上で行っています。
一旦ここで音声入力してからコピペするんですね。
Chrome は作業中のページタイトルを表示するのでこれが手がかりになるはずです。
Chrome で表示中のタブの切り替えは Control + tab で行います。
またマイクの音声開始は Control + SHIFT + S で行います。
これだけのネタがあればなんとかなりそうな気がします。

スクリプトは次のような手順になるでしょうか。

  • 起動中の Google Chrome を探す。
  • Google Chrome が見つからなかったら諦める。
  • Chrome で表示中のページタイトル音声入力用だったらマイクのスイッチを入れるためのショートカットキーをブラウザに送信する。
  • 音声入力用ページで作業していなかったらタブ切り替えショートカットキーをブラウザに送信して見つかるまで繰り返す。

documentを見ながら試行錯誤した結果がこれです。

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

今のところ音声入力用ページが見つからなかった場合、永久にタブ切り替えを続けます。
私の環境では必ず開いているのでしばらくの間はこの運用で問題ありませんが、そのうちページが見つからない場合の対応をしたいと思います。
もう一つ、 Google Chrome が複数起動している場合は期待した動作をしないと思います。
その辺は今度の機会にでも 。

yasushiito.hatenablog.com

Autohotkeyを使って capslock に半角全角キーを割り当てる

昨日は見事にはまった Auto HOT key
もう一度まともな形で再チャレンジしてみたいと思います。

このツールが最もよく使われるシチュエーションはキーの入れ替えではないでしょうか。
プログラマーあるあるですが滅多に使わないキーがすごく押しやすい所にある代わりに頻繁に使うキーに限って遠いところにあるというやつです。

筆頭となるのがキャップスロックキーだと思うんですが、このキー頻繁に使う人います?
ものすごく押しやすい位置に陣取ってますよ。
反面キャンセルボタンに当たるエスケープキーなどは結構遠くて押しにくい位置にあります。
簡単に入れ替えられるなら神ツールですよ。

私の場合はバシバシキー入力できるタイプではないのでそれほど大きな不満はないのですが一つだけ気になることが。
それは IME をオンにする漢字キーです。
度々この日記をご覧になる方はスクリーンショットに映り込んでいるスクリーンキーボードの配列に気づいているかもしれませんが US 配列キーボードを使っています。
こっちの方が記号入力が直感的に感じるので愛用しています。
また、キーボードを日本語キーボードで利用しているとスクリーンキーボードに使わないであろうひらがなが表示されてキートップの字面がよく分からないんですね。
みんなローマ字入力だろうからキートップのひらがないらないと思うんですけど。
せめてオプションでオフにして置けるようにしてほしい。

ということで今日はIME 切り替え動作を CapsLock キーできるようにしたいと。
US キーボードでの IME 切り替えはaltキー+~ですね 。
capslock 全角/半角キーなどをスクリプト上で表記するための方法を調べます。

ahkwiki.net

全角半角キーは IME の状態によってコードが違うようです。
いきなり先行き不安だな。
ダメ元でやってみる。

test.ahk

CapsLock::Send, {vkF3sc029}

このファイルを実行して Auto HOT key を常駐させます。
capslock キーを押してみると無事 IME は切り替わりました。
もう一度押すときちんと IME がオフになります。
案外簡単に実現できましたね。
しかしスクリーンキーボード上でキーの背景色が反転したままですね。
IME の状態が分かるのでかえって都合が良いのか。
とりあえず先に進みます。
このままでは Caps Lock キーがなくなってしまうので何らかのキーに capslock を割り当てなければなりません。
SHIFT + CapsLock でええやろ。

CapsLock::Send, {vkF3sc029}
+CapsLock::Send, [CapsLock]

これで実行しましたが期待通りにはならず IME の切り替えが動きました。
この組み合わせでは実現できないようです 。
シフトキーの組み合わせがまずいのかと想像してコントロールキーに変えてみましたがそちらもダメ 。
何度も弄り回しているとスクリーンキーボード上の反転表示が実際の状態と一致しなくなることもある問題が判明しました。
これはややこしい。
助けて Google 先生。

www.google.com

blog.goo.ne.jp

どうしても駄目なら ALT + space に逃げるかな。
2クリックだけど隣り合ったキーだからそんなにストレスはないだろうし 。
それとも capslock は無しでも良いか。
この一年でも二回くらいしか使った記憶がないので。
最悪必要になってもアッパーケースで対処した方が手数が少ないかもしれんし。
しばらくは Caps Lock なしで生きてみたいと思います 。

Autohotkey いきなり挫折!?しましたよ

先日取り組んだ Auto HOT Key で自動化する話の続きです。
タスクトレイに収納されているクリップボード監視アプリを終了させようとしていたのでした。

yasushiito.hatenablog.com

ところがこれがいきなり難しい。
タスクトレイアイコンのアプリケーションは特殊な役割を持っているらしくスクリプトから検出することは難しいようです。
メニューを追加したりアイコンを変えることはできるようなのですが。

キー入力を送信してショートカットキーなど組み合わせ、擬似的に人力動力ではだめだろうか?
タスクトレイアイコンの並び順が常に一定なら可能なんだけど。
その他の常駐ソフトを起動させてしまうと並び順が変わってしまうので駄目ですね。

はまりすぎて何をどう検索したかすら記録に残っていない……。
ダメじゃん。
あの手この手で実現している人はいらっしゃるようですが Windows のバージョンによっても挙動が違うらしく、ちょっとした作業で「はい完成」とはいかなさそうです。

d.hatena.ne.jp
stackoverflow.com


もっと他に簡単な実現方法はないかな。
右クリックが嫌ならタスクマネージャーから強制終了できなくもないです。
taskkill コマンドでバッチファイルから終了させる手段はプロセス ID が見つからないので殺せません。
それ以外にはシャットダウンコマンドでオプションを与えて強制シャットダウンすることでも回避できます。
もう毎回「 Windows のシャットダウンを妨げているアプリがあります」から強制終了でもいいよ… 。
今日想像以上に時間を溶かしてしまったのでここまでです 。

ありきたりの Windows 操作を自動化したい。

はじまりはいつも不満から

先日から利用を始めたクリップボード監視ツールですが一つだけ弱点がありました。
Windows をシャットダウンするときクリップボード監視中だと上手に終了してくれません。
電源を切りたい時に毎回アイコンから終了させるのはかなり面倒です。
特に右クリック操作のあたりで。
キーボード入力を擬似的に連続的に発行することはできないのかな。

探してみる 。

大昔の話ですが uwsc というアプリで Windows を自動操作した覚えがあります。
もう一つの情報として Windows ユーザーが長らくお世話になった uwsc も現在は他のツールに代替される流れとなっているという話も聞いた覚えがあります。
一段と進化した、時代にあった自動化ツールが普及しているのなら是非ともチャレンジしてみたいものです。
また最近では AI も含めて自動化するRPAという問題解決法も随分と話題になっています。
rpa については、 IoT スマートスピーカーに続くムーブメントになっているとすら聞き及びます。
RPAの仕組みはきっと複雑でしょうから比較的ハードルの低い Windows 操作だけの自動化ツールを探してみたいと思います。
と言うか実はこのブログの連続更新チャレンジ始める前に見つけています。
それらを紹介する記事を見つけました。
これでは検索の how to には何一つなりませんね。

qiita.com

これはとても参考になりますね 。
AutoItとAutoHotKey
この二つですね。
どちらもだいたい同じなのですが後者はショートカットキーに対応しています。
キーボードから複数のキーの組み合わせで入力されるのをきっかけに自動化処理を走らせる ことができるんですね。
例えば Windows キーを押しながら1を押すと メールソフトが起動するなどのようにできます。
キーボードショートカットでスクリーンショットを撮ったり右クリックメニューを開いたりしている私には絶好の機能ですね。
これを使えばクリップボード監視ツールの終了も比較的簡単に行えそうです。

試してみる 。

ダウンロードはこちらから。

www.autohotkey.com


サイトデザインがシンプルすぎて戸惑いますがダウンロードボタンでインストールプログラムをダウンロードしてください。
インストーラはdefaultの指示に従えばすんなり終わってくれます。
これも非常にシンプルに完了してしまうので若干戸惑いましたが、ちゃんとインストールできてました 。

インストールされたら早速実行して確認したくなります。
サンプルスクリプトが手近にあれば良いのですが、一見すると見つかりません。
日本語の Wiki サンプルコードがたくさんありますのでそれをコピペすれば試すことができます。
メモ帳などを開いてファイルを保存してください。
autohotkeyスクリプトファイルの拡張子は ahk です。

ahkwiki.net

よく分からないスクリプトをコピーして実行するのはちょっと不安があります。
実はサンプルファイルが Program Files\AutoHotKey に収納されています。
WindowSpy.ahkを実行してみてください。
起動中の Windows の様々なステータスが表示されるはずです。

f:id:yasushiito:20190313160101p:plain

まとめ

ここまで行けばあとはdocumentを読み込んでアプリケーション終了のスクリプトを作るだけです。

ahkwiki.net

どうやら Windows をシャットダウンする瞬間を捕捉できるようなので全く操作しなくてもクリップボード監視ツールをスムーズに終了させることもできそうです。
今回はここまでにしましょう 。

ahkwiki.net