5 ポイント 投稿者 GN⁺ 2023-08-23 | 1件のコメント | WhatsAppで共有
  • AutoHotKeyは強力だが最初はとっつきにくいWindows自動化ツールなので、実際の個人スクリプト集を学習資料として公開
  • 資料は全14ファイルで構成され、フォルダを開く・テキストを挿入する・プログラムごとのショートカットを拡張するといった、すぐ試せる自動化例が中心
  • 現在の日付、em dash、¯\\_(ツ)_/¯の高速入力から、vimユーザー向けのモーダルショートカットシステムや簡単なGUIデモまで含む
  • タイムスタンプをUTCとローカル時間に変換するスクリプトもあり、ショートカットを超えた実用的な作業フロー自動化を確認できる
  • 各ファイルにはコードが何をするのか、一部はなぜそのように実装したのかまでコメントで書かれており、教育用コードベースとして読みやすい

実務に近いAutoHotKeyサンプル集

教育用コードベースとして読む方法

  • このリポジトリは、人々がコードを読みながら学べるように作られた教育用コードベースの例
  • 各ファイルにはコードが何をするかについてのコメントが多く入っており、一部の実装にはその方式を選んだ理由もあわせて書かれている
  • 教育用コードベースに関する別の説明はニュースレター記事へ続く
  • さらに説明が必要な部分はGitHub Issueで要望できる

1件のコメント

 
GN⁺ 2023-08-23
Hacker News のコメント
  • コード関連の議論に初めて役に立つことを付け加えられそう。書き手として、いつでも空の notepad.exe を素早く開ける AutoHotkey スクリプトを作っておいた。~ キーを押すと開き、もう一度押すと閉じ、内容があれば保存ダイアログが出る
    私の AHK がやることはこれだけ

    • 同じキーが通常 ターミナルのトグルにも慣用的に使われる点が面白い。プログラマーがターミナルに「住んでいる」ように、デジタルグラフィック作業者もスケッチパッドや描画ソフトを同じように呼び出しているのか気になる
      ウィンドウを閉じたり最小化したりせず、直前のウィンドウと素早く行き来したいときは、Windows 標準ショートカットの Alt + Escape が便利。Alt+Tab のようにウィンドウ一覧を表示せず、直前にフォーカスしていたウィンドウへ直接切り替える
      AutoHotkey v1 では、ウィンドウタイトルの一部を探してアクティブ化し、すでにアクティブなら send, !{escape} で戻り、存在しなければ起動する、というスイッチャー/ランチャーのボイラープレートを作れる。タスクバーを散らかしたくなければ WinHide/WinShow も使えるが、一部のウィンドウではうまく合わず、ウィンドウ検出には ahk_exeahk_class のほうが適している場合もある
    • Notepad++ のほうが自動保存があるので良いのではないかと思う。保存していない文書まで自動保存される機能は、最高の機能の一つだと思う
    • 上のスクリプトを AutoHotkey 2 に移すと、「Tilde opens Notepad」のようにもっと簡単に書ける。WinActive("Untitled - Notepad")WinExist("*Untitled - Notepad") を確認して閉じるかアクティブ化し、なければ Run "Notepad" を実行する方式
    • Windows キーを押して「Notepad」と入力し、Enter を押すよりほんの少し速い程度。ただし単一の notes.txt 文書を開くようにすれば、メモを呼び出して追記し、1つのショートカットで保存/閉じるところまでできて、もっと格好よさそう
    • 良い方法。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 v2 がある。AHK にとっての Python 3 のような瞬間で、数年前から提供されており、安定版は1年ほど前に出たが、まだ採用は多くなさそう
    • それで CapsLock を Control に変える以外はあまり使えていなかった。そろそろ AHK にコンパイルされる Lisp DSL を作ってみる時なのかもしれない
    • その通り、それが AHK の最大の問題で、v2 はこの部分をかなり改善している。どの言語からでも使える汎用ショートカットリスナーが、wasm プラグインの魔法のようなもので可能になればいいのに、という夢がある
  • 結婚式のときに AutoHotKey でフォトブースを作った。婚約者の Nikon を USB で制御する簡単なソフトウェアと、ノート PC 上の IrfanView を一緒に使い、IrfanView はフォルダを監視して常に最新の写真を表示するよう設定した
    AutoHotKey で Preview、Autofocus、「SNAP」ボタンのある簡単な GUI を作り、SNAP を押すと大きなカウントダウンの後に写真を撮り、カメラソフトウェアを最小化してから IrfanView を表示した。数秒後にまたボタン GUI に戻るようにしたところ、参列者に好評で、フォトブースのレンタル費用を数百ユーロ節約しつつ、良い写真も得られた

  • この AutoHotKey スクリプトは私にとって状況を一変させた。Ctrl + Shift + V を書式なし貼り付けに割り当て、クリップボードをテキストに変換して貼り付け、少し待ってから元のクリップボードを復元する

    • 参考までに、AutoHotKey なしでも PowertoysPureText で可能。非常に便利
      https://learn.microsoft.com/en-us/windows/powertoys/
      https://stevemiller.net/puretext/
    • 書式まで貼り付けるのがデフォルトだというのは本当に変。これまで一度も書式を維持して貼り付けたいと思ったことがないし、どんなユースケースを狙っているのかも理解できない
    • Ctrl+Shift+V は本当に良い。クリップボード用の OS 標準ショートカットになるべき
      直近5件のクリップのような複数値クリップボードもあるといいが、それは求めすぎかもしれない
  • AHK は、Windows に縛り付けているアプリの一つです。キーボードに äöüß、áóúñ のような文字を追加したり、部屋やアパートの照明の明るさを制御したり、08:39 –2023-08-22 08:39:462023-08-22 — Tuesday のようなタイムスタンプを1〜2個のボタンで入力したり、Pause キーのトグル時に Tasmota 対応コンセントでモニターの電源をオン・オフしたり、といった使い方をしています
    ただ、2台目のキーボードをボタンパッドのように使いつつ、そのキー入力は飲み込んでくれる機能があればいいなと思います。そこで、ボタン数を増やすために小型の Bluetooth キーボードを Raspberry Pi Zero に接続して使っています

    • macOS では Hammerspoon が最良の選択肢に見えます
      https://www.hammerspoon.org/
    • コストを許容できるなら、QMK や他のカスタムファームウェアをサポートする安価なキーボードを探して、一部のキーを F13〜F24 や Ctrl+Alt+Shift+P のような押しにくい組み合わせにマッピングできます
    • Luamacros で2台目のキーボードを横取りし、キー入力を AutoHotKey に渡して良い結果が得られたことがあります
      https://miquelvir.medium.com/secondkeyboard-1c39e52e023b
      こちらもあります: https://github.com/evilC/AutoHotInterception
    • Linux では AutoKey を使っています。AHK より強力ではありませんが、標準の Python を使えるのが良いです
      https://github.com/autokey/autokey
    • AutoHotInterception を使うと、AHK がハードウェア ID を基に異なるキーボード/マウスを区別できます。別キーボードに独自のレイアウトやマクロを持たせられます
  • 私も AutoHotKey を常用しています。日付/時刻スタンプ用ショートカット6種、よく使うホストとシリアルポート用の PuTTY/SSH ランチャー、Outlook・Windows Terminal・Total Commander など10個以上のアプリの状態ベースのランチャー、どこでも書式なし貼り付け、改行除去貼り付け、特殊文字と絵文字用の AltGr 入力レイヤー、メディア/音量ショートカットまで入れています

  • 個人の 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...

    • Kanata は優秀です。Linux と Windows の両方をサポートしていますが、主な作業環境が Linux なので Windows ではまだ試せていません
      https://github.com/jtroo/kanata
    • ホームロー修飾キー もおすすめです。キーを短く押すと本来どおり動作し、長く押すと別の機能を持たせる方式です
      例えば https://github.com/evilC/TapHoldManager は AHK でこれを実装しています。Shift/Ctrl/Win/Alt を fdsajkl; の下に置くと、小指の使用が減り、指をホームローにより長く留めておけます
    • 数年間 AHK でこれらのキーを入れ替えて使ってきましたが、次のような簡単なスクリプトで動きます: CapsLock::Esc, Esc::CapsLock
      グローバルショートカットでプログラムを起動するなど、他の AHK の手早い改善点もまとめています: https://nickjanetakis.com/blog/remap-and-set-global-hotkeys-...
    • スキャンコードマップ レジストリ も試す価値があります。Ctrl/CapsLock の入れ替えに使っており、PowerToys では処理できなかった RDP ソフトウェアや管理者権限のアプリでもうまく動作します
      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が人気なのは、見た目は不格好でも動くからだと思う

    • まだならv2に上げてみるとよい。今年初めに出て、言語がかなり不格好でなくなった。コマンド/関数の区別がなくなり、すべて関数になった
    • AHKをC#で書き直し、ほかのOSもサポートしようとする試みがある
      https://www.autohotkey.com/boards/viewtopic.php?f=80&t=77248
    • AHKが人気なのは、たいていの「本物の」プログラミング言語なら許容しない不格好さのおかげで、最初の取っつきやすさが高まっているからだ
    • PyAutoGuiも非常に良い。長年使ってきて、最近はいくつかの簡単なAHK自動化を書き直した。1:1の代替品ではないので今でもAutoHotKeyは使っているが、UI自動化機能はよくできている
  • AutoHotKeyは素晴らしい。より速いアプリ切り替えのために使っていて、私の場合はRight Altを「ショートカット有効化」キーにしてすべてを制御している
    押したまま文字キーを押すと、そのアプリのインスタンスを順番に切り替える。たとえばAlt+CはVS Codeのウィンドウへ切り替え、Alt+F系は特定プロファイルの新しいChromeウィンドウのように、新しいアプリインスタンスを開く。Alt+数字は現在フォーカス中のウィンドウに設定でき、Altをタップすると編集モードがオンになって現在のウィンドウを数字キーに割り当てられる。編集モードではH/J/K/Lが上/下/左/右のナビゲーションキーになり、アプリ切り替えがずっと速くなる

  • 以前Diablo 3をプレイしていたときに見つけて修正したスクリプトが最も印象的だった。マウスを持つ手をマウスパッドに強く押し付けすぎて反復性ストレス障害の問題が出ていたので、コントローラーでプレイする方法を探した
    そのスクリプトはアナログ移動をキャラクター周囲の小さな円にバインドし、どの方向にも滑らかに走れるようにしていた。ボタンを押すと範囲を遠くに変えて、遠距離アビリティを発動できた。クラスごとに少しカスタマイズするだけで、驚くほどうまく動いた