ぺんちゃん日記

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

【AutoHotkey】ハンズフリーで Twitter のタイムラインを眺め続ける 。

先日イマイチだった Twitter だらだら作戦を、今回はAutoHotkeyで何とかしようと目論んでいます。

www.autohotkey.com

Twitter のウインドウにホイールを回転させるメッセージを送信すればスクロールできますもんね。
マウスホイールがダメでも矢印キーで実現できますし。
Twitter をブラウザで表示しても良いのですが、操作の対象をブラウザにすると判定が何かと面倒でしょうか。
そこで Twitter 公式の Windows アプリをインストールします。
デスクトップアプリを入れればシンプルにウインドウを探せると思います。

www.microsoft.com

Twitter アプリの確認

アプリをインストールしたらひとしきり動作を確認します 。

  • タイムラインの表示を確認。
  • マウスホイール及び矢印キーでのスクロールの確認。
  • ウィンドウタイトルの確認。

どうやら公式 Twitter アプリはウィンドウタイトルが常に Twitter の 様ですね。
クリックなどでtweet詳細を見たりメンションを表示していても Auto HOT key 側では状態を把握できないということになります。
つまり、どんな状況であってもスクロール操作を送信し続けるということですね。
リプライしようとしたらスクロール。
設定を変えようとしてもスクロール。
タイムラインを眺める以外に使えないことになります。
残念な感じですが、その辺の作業はブラウザに任せられないこともないです。
むしろそこは分けた方が使いやすいんじゃないかな?

AutoHotkeyで操作してみる。

AutoHotkeyspyTwitter を確認してみます。
プロセスは applicationframehost.exeというファイルから実行されています。
クリップボード監視アプリではタスクトレイアイコンに 常駐していて操作できませんでした
苦い経験ですね。
しかし、今度はタスクバーに表示されているし、ウィンドウを掴めないなんてことはないでしょう。
タイトルは Twitter で一定なのでタイトル名で探せば良いですね。

ところがなぜかタイトル名 Twitter のウィンドウが見つからない…。
タイトル名を間違えているのかとspyからコピーしましたがWindow 取得関係の関数みんなダメ。
実行ファイル名で探しましたがそれもNG。
こんな簡単なことがなぜかできない。
悔しいです。

諦めかけたその時に一つ思いつきました。
Twitter アプリを実行すれば最前面に表示されますよね。
ここでアクティブウィンドウをつかめば良いのでは。
スタートメニューからTwitterを起動してみると起動中の Twitter が最前面に出てきます。
スタートボタンからファイル名を起動して実行すれば同じことができますね。
スタートボタンの横に[ここに入力して検索]にフォーカスを映して Twitter+Enter でオッケーです。
ところでファイル名を直接指定して実行するための入力ボックスにフォーカスを移すショートカットは何?

意外と探すのに苦戦しましたが Windows +s の組み合わせのようです。
これで Twitter アプリを最前面に持ってくることは出来ました。

次はアクティブウィンドウのウィンドウハンドルを取得します。
実はこれも結構苦戦しましたが。
のようにすることで実現できます。

WinGet, win, ID, A

Aアクティブウィンドウという意味でIDがウィンドウハンドルの取得という意味です。
この結果変数win の中に結果が入ります。

次はこのウィンドウハンドルにキーを送信してみます。
動作画面を見せることはできませんがしっかりスクロールしますから、キー送信できていることを確認できました。
今度はメッセージをマウスホイールのごろごろに変えて確認します 。
こちらも大丈夫 。
次は他のウィンドウの裏にしてスクロールできるか確認してみます。
こちらの方は失敗。
Auto HOT key のdocumentを見たらマウスホイールのメッセージはマウスポインターがいる場所に対して送信されるとあるじゃないですか。
これじゃあマウス操作するだけであちこちのウィンドウがスクロールしてしまうことになります。
こんな環境では迂闊にマウスポインターを動かせないです。

現状を再確認しますと Twitter 最前面にある時だけキー送信でスクロールさせることができます。
作業中に眺めたいという要望は実現不能とわかりました。

まあそれでもハンズフリーでタイムラインを眺めるという要望なら可能なようです。
Twitter のウィンドウハンドルを掴むことはできていますから、後はアクティブウインドウの ID が Twitter アプリの ID だったら上矢印のメッセージをバシバシ送るだけですね。
ある程度読む時間を空けないと一方的にスクロールされて終わりなので待機時間は調整することとします。
この他にTwitter アプリを終了したら Auto HOT key のスクリプトも終了する処理とします。

出来上がったスクリプトはこれ。

send,#s
sleep 500
send,twitter
sleep 500
send,{enter}
sleep 3000
WinGet, win, ID, A
loop
{
  IfWinNotExist, ahk_id %win%
    break
  WinGet, now, ID, A
  If (win = now) {
    loop, 9
    {
      Sleep 60
      Send,{up}
    }
    Sleep 8000
  }

}

Twitter が起動することを確認できるまでは余計なマウスやキー操作はしないでくださいね。
今のところ YouTube を見ながらタイムラインを眺めています 。