2006-12-20 [長年日記]

[AHK] AutoHotKey が凄い件

今更ながら AutoHotKey 凄いですね。AutoHotKey というのは、キーボードのキータイプに応じて任意の処理を実行させる常駐型のフリーソフトです。ここで言う「任意の処理」とは、AHKスクリプト(VBとCが混ざったような独自言語)を用いて自分で記述すること、ですので、はい、自由度無限大です。

使い方

インストールしてアプリを起動すると、タスクトレイに「H」というアイコンが表れます。実行されているAHKスクリプトは、インストールされたディレクトリの AutoHotKey.ini です。直接編集してもよいですが、「H」アイコンを右クリック→「Edit This Script」でメモ帳が自動的に開きます。最初は初期ファイルを作成するかどうか聞かれるので、「はい」で。このファイルに処理を記述して、同じく「H」アイコンから「Reload This Script」を実行することで内容が反映されます。

AHK書式

基本文法

(キー)::(処理)

基本的な文法はこれだけです。"::" の左辺で押された「キー」を表し、右辺で実行する「処理」を表します。

代表的なキー表記

表記キー
+Shiftキーの修飾
^Controlキーの修飾
!Altキーの修飾
#Windowsキーの修飾
a'A'キー (大文字小文字は関係ない)
b'B'キー
Spaceスペースキー
Right右矢印

詳細は「AutoHotkeyを流行らせるページ」 http://lukewarm.s101.xrea.com/ の「HotKeys」「キーリスト」を参照。

代表的な処理表記

表記処理
(キー)前述のキー表記で指定されたキーの押下をエミュレートする
Run引数のプログラムを実行する (コマンドと引数の区切りは ",")
WinActivate引数のWindowをアクティブにする
ControlSend引数のWindowにイベントを送信する
(複数の処理表記)プログラムとして順次実行する
returnそのキー定義の処理を終了する

詳細は「AutoHotkeyを流行らせるページ」 http://lukewarm.s101.xrea.com/ を参照。

単純な使用例

a::b
b::a

これは "a" が押されたら "b" が表示され、"b" が押され(ry、という隣の人の端末に隙をついて仕込む嫌がらせぐらいにしか用途がないどうしようもないAHKスクリプトですが(*1)、この簡潔さと強力な表現力はAutoHotKeyの可能性を感じさせるのに十分です。

(*1) 願わくば愛理のPCに仕掛けて、あの眉をもっと下げさせたいでケロ

サンプル

「Edit This Script」を開くと、以下の2つのキー定義が初期サンプルとして用意されているのがわかります。

Window(#)キーを押しながら'z'で指定URLを開く

#z::Run www.autohotkey.com

Ctl(^) + Alt(!) + n でメモ帳を開く

^!n::
IfWinExist Untitled - Notepad
	WinActivate
else
	Run Notepad
return

かなりの頻度で参照するURLや外部アプリケーションがあれば、キーと対象をちょっと変えるだけで即実用的です。If文などの文法に関する詳細は「AutoHotkeyを流行らせるページ」(ry

PuTTY のタブ化

実はこれが目的。来年にはさすがに実装されるだろうと待つこと数年、いよいよ本気を出して代案を探し始めた所なのです。

PuTTYタブ化の代案2006冬

代案感想試用期間
Poderosaエスケープシーケンス周りの表示が時々バグるのとテキスト表示が異様に遅くてギブ1年
UTF-8対応TeraTerm ProCollector に到達できずにギブ30分
すごいよたぶちさん汎用的だけどフォーカスやサイズ調整に難ありでギブ30分
AutoHotKeyタブ化は手段でホットキーによる切り替えが目的だと気付いた(いまここ)

で、AutoHotKeyなら頑張ればできそうな気がしたんですが、「AutoHotKey スレ3」にいきなり鱗級の解法がありました。

同じWindowクラス名の一番下に回す処理

+Tab::
  WinGetClass, className, A
  WinActivateBottom, ahk_class %className%
  return

上記では "+Tab" に割り当てていますので、PuTTY がアクティブな時に Shift+Tab を押すだけで次の PuTTY へ移動できるのです!しかも、PuTTY 限定でなく、アクティブウィンドウに作用するので、「FireFox を ALT + Tab で探したと思ったらダウンロード窓かよー!」なんてときにも、Shift + Tab 一発で本体へジャンプ。もちろんエクスプローラでも何でも同一グループ(クラス名)なら何でも使えちゃう><。

キー動作
Alt+Tab次のWindowへ移動
Shift+Tab次の同一クラスのWindowへ移動
Ctl+Tab次のタブへ移動

と、他の修飾キーとの類似性的にも早速お気に入りで、もう手放せません。スレの106氏には感謝です。ブロックのアンインデントが出来なくなった事に薄々気付き始めたけど、まぁ、それは修飾キーを「窓」なり「Shift+Ctl」にするなり何なりの方法で。

小遣いUP大作戦問題

「Berryz工房は名曲揃い」は狼の総意。確かに、シングルのみならずCW・アルバム含めて全てが名曲と言っても過言ではない。(ベリヲタ調べ)。だが、そのアキレス腱とも言うべき曲が1曲だけある(*1)。「1st 超ベリーズ」の「小遣いUP大作戦」だ!こいつだけは承服できねー!ということで、必然的にその曲がかかるとプレイヤーアプリの「次曲へ」ボタンを押す必要があり(*2)、これを何とか非アクティブウィンドウであってもキー操作のみで行いたいという要求が生まれる。これが「小遣いUP大作戦問題」である。

KbMedia Player (クラス名 TFrmMIDI) の次曲(ALT+→)操作の定義

#n::
DetectHiddenWindows,On
ControlSend,,!Right,ahk_class TFrmMIDI
return

「AutoHotkeyを流行らせるページ」の「使用例」に「サウンドプレイヤーや常駐ソフトなどを好きなホットキーで直接操作」というこれまたピッタリの例があったので、ウホッ流行らせるページさんいい男!と見よう見まねで上記のようなコードを書くも、動きません。(いまここ)。このように色々と楽しいので、興味のある人は是非、流行らせるページさんのサイトを訪れて軽くAHKの達人になって下さい。そして、小遣い問題を解決して下さい><

(*1) 正確には「にぎやかな冬」もだが、矢口が入ってる時点で(ry
(*2) プレイリストから外すのは完全性を求めたがるA型のポリシーに反する 

参考

本日のツッコミ(全6件) [ツッコミを入れる]
_ TT (2006-12-26 13:21)

3か月前にAutoHotkeyでまったく同じ挫折を経験した私が来ましたよw<br>Kbmedia Playerは自前でホットキーの機能があるので結局そっち使っちゃってる。[ツール]-[その他の設定]-[ホットキー有効]にしてからSHIFT+CTRL+Nで次の曲。

_ yamaz (2006-12-26 15:52)

PoderosaのエスケープシーケンスにはうんざりしながらもTab切り替えが故にしょうがなく使ってた私が来ましたよ.Teratermで不満なCollectorって何ですか?

_ なひ (2006-12-26 19:42)

ckは駄目?

_ 舞波 (2006-12-26 21:25)

>TT<br>自前であるんすか、さんくすこ!俺も真似する〜<br><br>>yamaz<br>Collectorというツール?を使うとタブ化できるらしいんですよ、旦那。<br>でインスコ時にチェックするも、どこに出るのかすら探し出せずに挫折。<br>別途インスコするものなのかなぁ?ぐらいのレベルです。<br><br>>なひ<br>あぁ、cygwin でしたっけ。インストールが面倒で使ってなかった>cygwin。<br>ck いい感じですか?ssh port forwarding とかも可?試してみようかな。

_ 小川 (2007-01-02 02:09)

PuTTYβ0.58ごった煮版には「Ctrl+TABでPuTTYのウィンドウを切り替えられるようにする設定」があるのでこれでもいいのではないでしょうか。<br>でもAutoHotKeyの方が便利そうですね。

_ 舞波 (2007-01-04 03:36)

あぁ!


サイト内検索 (by Google)

| JRuby | Rails | Berryz | ℃-ute | エッグ | jQuery |

過去

2006年
12月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

未来

コンタクト