私のスクリプトを盗んでAutoHotKeyを学ぶ
(hillelwayne.com)- AutoHotKeyは強力だが最初はとっつきにくいWindows自動化ツールなので、実際の個人スクリプト集を学習資料として公開
- 資料は全14ファイルで構成され、フォルダを開く・テキストを挿入する・プログラムごとのショートカットを拡張するといった、すぐ試せる自動化例が中心
- 現在の日付、em dash、
¯\\_(ツ)_/¯の高速入力から、vimユーザー向けのモーダルショートカットシステムや簡単なGUIデモまで含む - タイムスタンプをUTCとローカル時間に変換するスクリプトもあり、ショートカットを超えた実用的な作業フロー自動化を確認できる
- 各ファイルにはコードが何をするのか、一部はなぜそのように実装したのかまでコメントで書かれており、教育用コードベースとして読みやすい
実務に近いAutoHotKeyサンプル集
- AutoHotKeyを学ぶのが難しいと感じるユーザー向けに、個人的に使っていたスクリプトの大半を説明付きで公開
- 全コードはGitHubリポジトリで見られ、全14ファイルで構成
- 主な例は次のとおり
教育用コードベースとして読む方法
- このリポジトリは、人々がコードを読みながら学べるように作られた教育用コードベースの例
- 各ファイルにはコードが何をするかについてのコメントが多く入っており、一部の実装にはその方式を選んだ理由もあわせて書かれている
- 教育用コードベースに関する別の説明はニュースレター記事へ続く
- さらに説明が必要な部分はGitHub Issueで要望できる
1件のコメント
Hacker News のコメント
コード関連の議論に初めて役に立つことを付け加えられそう。書き手として、いつでも空の notepad.exe を素早く開ける AutoHotkey スクリプトを作っておいた。
~キーを押すと開き、もう一度押すと閉じ、内容があれば保存ダイアログが出る私の AHK がやることはこれだけ
ウィンドウを閉じたり最小化したりせず、直前のウィンドウと素早く行き来したいときは、Windows 標準ショートカットの Alt + Escape が便利。Alt+Tab のようにウィンドウ一覧を表示せず、直前にフォーカスしていたウィンドウへ直接切り替える
AutoHotkey v1 では、ウィンドウタイトルの一部を探してアクティブ化し、すでにアクティブなら
send, !{escape}で戻り、存在しなければ起動する、というスイッチャー/ランチャーのボイラープレートを作れる。タスクバーを散らかしたくなければWinHide/WinShowも使えるが、一部のウィンドウではうまく合わず、ウィンドウ検出にはahk_exeやahk_classのほうが適している場合もあるWinActive("Untitled - Notepad")とWinExist("*Untitled - Notepad")を確認して閉じるかアクティブ化し、なければRun "Notepad"を実行する方式WinActive()やWinExist()関数を使えば、複数のタイトル条件をorで組み合わせられるし、必要なら"Untitled - Notepad ahk_class Notepad"のように ahk_class 条件も一緒に入れられるAutoHotkey はすごいが、言語がもう少しまともだったらいいのにと思う。Aero Snap の黄金比版を安定して作ろうとして苦労した。複数モニターとサイズを扱うのがここまで難しい理由はなさそうなのに、奇妙な
Loop構文や単純なミスが静かに失敗するせいで面白さが失われ、諦めることになったPython 用の ahk モジュールも見つけたが、
keyboardモジュールと組み合わせると、AutoHotkey ほどショートカットリスナーとしてうまく動かなかったhttps://github.com/idbrii/daveconfig/blob/main/win/autohotke...
https://pypi.org/project/ahk/
結婚式のときに AutoHotKey でフォトブースを作った。婚約者の Nikon を USB で制御する簡単なソフトウェアと、ノート PC 上の IrfanView を一緒に使い、IrfanView はフォルダを監視して常に最新の写真を表示するよう設定した
AutoHotKey で Preview、Autofocus、「SNAP」ボタンのある簡単な GUI を作り、SNAP を押すと大きなカウントダウンの後に写真を撮り、カメラソフトウェアを最小化してから IrfanView を表示した。数秒後にまたボタン GUI に戻るようにしたところ、参列者に好評で、フォトブースのレンタル費用を数百ユーロ節約しつつ、良い写真も得られた
この AutoHotKey スクリプトは私にとって状況を一変させた。Ctrl + Shift + V を書式なし貼り付けに割り当て、クリップボードをテキストに変換して貼り付け、少し待ってから元のクリップボードを復元する
https://learn.microsoft.com/en-us/windows/powertoys/
https://stevemiller.net/puretext/
直近5件のクリップのような複数値クリップボードもあるといいが、それは求めすぎかもしれない
AHK は、Windows に縛り付けているアプリの一つです。キーボードに äöüß、áóúñ のような文字を追加したり、部屋やアパートの照明の明るさを制御したり、
08:39 –、2023-08-22 08:39:46、2023-08-22 — Tuesdayのようなタイムスタンプを1〜2個のボタンで入力したり、Pause キーのトグル時に Tasmota 対応コンセントでモニターの電源をオン・オフしたり、といった使い方をしていますただ、2台目のキーボードをボタンパッドのように使いつつ、そのキー入力は飲み込んでくれる機能があればいいなと思います。そこで、ボタン数を増やすために小型の Bluetooth キーボードを Raspberry Pi Zero に接続して使っています
https://www.hammerspoon.org/
https://miquelvir.medium.com/secondkeyboard-1c39e52e023b
こちらもあります: https://github.com/evilC/AutoHotInterception
https://github.com/autokey/autokey
私も AutoHotKey を常用しています。日付/時刻スタンプ用ショートカット6種、よく使うホストとシリアルポート用の PuTTY/SSH ランチャー、Outlook・Windows Terminal・Total Commander など10個以上のアプリの状態ベースのランチャー、どこでも書式なし貼り付け、改行除去貼り付け、特殊文字と絵文字用の AltGr 入力レイヤー、メディア/音量ショートカットまで入れています
https://gist.github.com/raveren/bac5196d2063665d2154
個人の Linux ノート PC では Caps Lock と Escape を入れ替えて使っており、慣れてしまいました。Windows をデュアルブートしたときは PowerToys で同じ設定にしましたが、会社では PowerToys や Uncap をインストールできないため、AutoHotKey しか選択肢がありません
StackOverflow の回答どおりにしたところ、Caps Lock と Escape がどちらも両方のキーを同時に送る状態になってしまい、時々 Teams のメッセージを台無しにしています
https://github.com/microsoft/PowerToys
https://github.com/susam/uncap
https://stackoverflow.com/questions/38558376/how-to-map-caps...
https://github.com/jtroo/kanata
例えば https://github.com/evilC/TapHoldManager は AHK でこれを実装しています。Shift/Ctrl/Win/Alt を
fdsaとjkl;の下に置くと、小指の使用が減り、指をホームローにより長く留めておけますCapsLock::Esc,Esc::CapsLockグローバルショートカットでプログラムを起動するなど、他の AHK の手早い改善点もまとめています: https://nickjanetakis.com/blog/remap-and-set-global-hotkeys-...
https://superuser.com/questions/550679/where-can-i-find-wind...
https://github.com/hwalinga/dotfiles/blob/master/CapsLockCtr...
CapsLock を他のキーと一緒に押すと Ctrl、短く押すと Esc として動作する二重機能も実装しています
ほかの人も言っているように、AHKはWindowsでできるようにしてくれることが驚くほど多い。個人的には、AHKのおかげで10万ドル以上を節約または稼げたと言える
ただし、AHKという言語自体は、書いていて最も楽しい部類ではない。なぜPythonやLuaに同じレベルで強力なツールがないのか疑問だし、https://github.com/pywinauto/pywinautoも実際にはAHKほどはうまく動かなかった。結局、下はWinAPIなので、良いラッパーライブラリがあるならC#も選択肢になり得る。AHKが人気なのは、見た目は不格好でも動くからだと思う
https://www.autohotkey.com/boards/viewtopic.php?f=80&t=77248
AutoHotKeyは素晴らしい。より速いアプリ切り替えのために使っていて、私の場合はRight Altを「ショートカット有効化」キーにしてすべてを制御している
押したまま文字キーを押すと、そのアプリのインスタンスを順番に切り替える。たとえばAlt+CはVS Codeのウィンドウへ切り替え、Alt+F系は特定プロファイルの新しいChromeウィンドウのように、新しいアプリインスタンスを開く。Alt+数字は現在フォーカス中のウィンドウに設定でき、Altをタップすると編集モードがオンになって現在のウィンドウを数字キーに割り当てられる。編集モードではH/J/K/Lが上/下/左/右のナビゲーションキーになり、アプリ切り替えがずっと速くなる
以前Diablo 3をプレイしていたときに見つけて修正したスクリプトが最も印象的だった。マウスを持つ手をマウスパッドに強く押し付けすぎて反復性ストレス障害の問題が出ていたので、コントローラーでプレイする方法を探した
そのスクリプトはアナログ移動をキャラクター周囲の小さな円にバインドし、どの方向にも滑らかに走れるようにしていた。ボタンを押すと範囲を遠くに変えて、遠距離アビリティを発動できた。クラスごとに少しカスタマイズするだけで、驚くほどうまく動いた