🐈

Windowsプログラミングが捗るAutoHotkeyのホットストリング

2022/04/18に公開

AutoHotkeyとは何か

いろんなマクロが非常に手軽に作れるスクリプト言語。exeを常駐起動させることでキー入力やWindowsの様々なイベントからフックさせスクリプトを実行できる。位置づけはVBScriptやJavascriptに似ているがWindows環境でのスクリプト実行に長けている。個人的にはWindows環境でプログラミングするなら必須。

HP:http://ahkwiki.net/Top
wiki:https://ja.wikipedia.org/wiki/AutoHotkey

AutoHotkeyでできること

いろいろできすぎるが故に何に使っていいかわからなく思われる事がありそうだが、結局ホットストリングが一番使えそう。

ホットストリングは、ユーザーが特定の文字列をタイプしたときにアクションを発生させられる機能である。
入力された文字列を別の文字列を入力する自動置換型と、ホットキーのようにスクリプトを実行するタイプがある。

"ahk"と打ってタブキーを押すと"AutoHotkey"に変換するみたいな機能。
プログラミングにおける入力補完、コードスニペットとして使える。({Left}と組み合わせたりとか)
他には、Windows環境でのmacキーボード使用にも一役買う。

設定サンプル

AutoHotkey.ahk

; ;	コメント 行の途中だと正しくコメントされない場合がある
; +	Shift
; ^	Control
; !	Alt
; #	Windowsキー
; 上下左右	{Up}{Down}{Left}{Right}
; {をSendする	{{}
; 変数のデバッグ出力 MsgBox, % 変数

; ↓↓↓ キーバインドの設定 ↓↓↓ キーボードによってここの設定は多少変わる
#USEHOOK
; macキーボードの英数キーに変換を割りあてる
vkFFsc072 Up::Send,{vk1Csc079 Down}{vk1Csc079 Up}
; アンダースコアをshiftなしで
vkE2sc073::_
#USEHOOK off

; ↓↓↓ ホットストリングの設定↓↓↓
#Hotstring O C ?
; O 終了文字を入力しない
; C 大文字小文字を区別する
; ? 単語の途中であっても発動
#Hotstring EndChars `t
; ホットストリングの変換をタブキーを押した時のみ動作させる

; よく使うSQLや
::sel::select id, name from users where status = 1 order by id{;}

; よく使うクラスなどを登録するとよさそう
::Uc::UserConfig
::uc::user_config

; この例はちょっと微妙だけど"-"の2回押しですぐ"="に変換するとかもできる
; 最初の::の間に入れると個別オプション
; * 入力した時点で直ちに変換する
:*:--::=

::ahk::AutoHotkey
::ps::1234567
::tl::08012345678
::ml::yamada.tarou@gmail.com
::al::alert();{Left}{Left}
::objc::Objective-C
; ここたくさん登録してる

; 右クリック押しながらホイール上下でPageUp,PageDown(右クリックも効いちゃうけど)
~RButton & WheelUp::Send, {Pgup}
~RButton & WheelDown::Send, {PgDn}

; ↓↓↓ その他スクリプト ↓↓↓
; エクセルのF1:ヘルプを無効にする
#IfWinActive ahk_exe EXCEL.EXE
F1::
return
#IfWinActive

; AutoHotkey.ahkをctrl+sで保存した時にリロードする(sakuraだと効かない)
SetTitleMatchMode,2
#IfWinActive, AutoHotkey.ahk
^s::
    Send,^s
    Sleep,250
    Reload
return
#IfWinActive

その他Q&A等

・AutoHotkey.ahkの配置場所をマイドキュメントから変えたい。
 →AutoHotkey.exeと同じフォルダに移動しても動作する

・インストール版のメリット?
 →Zip版にはAU3_Spy.exeがついてない。インストール版のやつを持ってきても普通に動くのに。。
 また、zip版の場合、管理者権限のウィンドウ上でスクリプトを実行できない事があるようだ。筆者は詳しくないが以下が参考になるかも。
 参考: https://magai.hateblo.jp/entry/2020/11/19/102420

・ahk_classやahk_exeを調べたい
 →インストール版のみについているwindow spy(AU3_Spy.exe)で

・キーのVK,SCを調べたい
 →Open→View→Key history and script info

・VK,SC表示されないけどキー割り当てたい
 →多分無理

・変数をデバッグ出力したい
 →MsgBoxを使うのが楽。OutputDebugというものでテキストに出力できるようだが筆者は使ったことはない

・Edit this scriptしたときに他のエディタで開きたい
 →多分無理だと思うけどわからない

・拾えるイベント
 https://sites.google.com/site/agkh6mze/howto/winevent
 https://msdn.microsoft.com/en-us/library/dd318066(VS.85).aspx

・その他スクリプト
 指定したURLを複数のブラウザで同時に開く




リロードスクリプトの参考:
https://wbtmiu.herokuapp.com/2014/07/21/6ThM6XK6YC/

Discussion