もともとキーカスタマイズ(ショートカットキーの設定)にはあまり興味が無かったんだけど、AutoItでやるにはどうしたらいいのかふと気になって調べてスクリプトを書いてみたらかなり便利だったのでメモ。

1.AutoItでショートカットキーを設定する方法。

キーを押した時に実行される関数を書いてHotKeySet()で登録する。実行中は無限ループでキー入力待機。

; CTRL+aに関数を割り当てる
HotKeySet("^a", "RunTest")

While 1
    Sleep(100)
WEnd

Func RunTest()
    MsgBox(0, "Test", "CTRL+a が押された")
EndFunc

キーの組み合わせはSend()と同じ表記方法。
特殊なキーとしては
!: ALTキー
+: SHIFTキー
^: CTRLキー
#: WINDOWSキー
ぐらい知っておけば良さそう。

2.特定のアプリケーションだけで有効にしたい場合

特定のアプリケーションのウィンドウがアクティブかどうかWinActive()で判定して処理をかき分ける。

; CTRL+aに関数を割り当てる
HotKeySet("^a", "RunTest")

While 1
    Sleep(100)
WEnd

Func RunTest()
    ;メモ帳でだけ有効
    If WinActive ("[CLASS:Notepad]", "") Then
        MsgBox(0, "Test", "CTRL+a が押された")
    EndIf
EndFunc


3.選択文字列を渡して処理

ClipGet()を使ってクリップボード経由で値を渡すとウェブブラウザと連携できて便利。

; CTRL+eに関数を割り当てる
HotKeySet("^e", "TranslateWord")

While 1
    Sleep(100)
WEnd

; 選択中の文字を使って"英辞郎on the WEB"で検索
Func TranslateWord()
    Send("^c")
    $word = ClipGet()
    ShellExecute("http://eow.alc.co.jp/%22" & $word & "%22/UTF-8/")
EndFunc

注意したいのはショートカットキーで呼び出す関数の中で同じショートカットキーをSend()してはいけないということ。つまり "^e" に割り当てる関数の中で Send("^e") を呼んではいけない。無限ループになるみたい。

4.キーカスタマイズの開始・一時停止・終了

リファレンスのサンプルにもあるけれどキーカスタマイズの一時停止・終了を書いて置くと意外と便利。デフォルトで実行したい場合はスクリプトをコンパイルしてスタートアップに入れておけばいい。

Global $Paused ; キーマッピングの一次解除/再開の状態を表すフラグ

HotKeySet("{PAUSE}", "TogglePause") ; Pauseキーでキーマッピングの一次解除/再開
HotKeySet("{ESC}", "Terminate") ; ESCキーでスクリプトの終了
HotKeySet("^e", "TranslateWord") ; CTRL+eに関数を割り当てる

; キー入力を待つ
While 1
    Sleep(100)
WEnd

; キーマッピングの一次解除/再開
Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip("キーマッピング一時停止中", 10, 10)
    WEnd
    ToolTip("")
EndFunc

; スクリプトの終了
Func Terminate()
    $input = MsgBox(4, Default, "キーマッピングを終了します")
    If $input =6 Then
        Exit 0
    EndIf
EndFunc

; 選択中の文字を使って"英辞郎on the WEB"で検索
Func TranslateWord()
    Send("^c")
    $word = ClipGet()
    ShellExecute("http://eow.alc.co.jp/%22" & $word & "%22/UTF-8/")
EndFunc

これで完成。

関連:
AutoIt v3 ドキュメント 日本語訳プロジェクト
AutoItでIEを自動操作
AutoIt アプリ操作 10のサンプルスクリプト