• #AutoHotkey
  • #Windows
  • #スクリーンショット
  • #キーリマップ
開発未分類メモ

CapsLockを押すだけでスクリーンショットを撮れるようにする

Windows 11のスクリーンショット(Snipping Tool)は Win+Shift+S で起動する。便利だけど、3キー同時押しは地味に面倒くさい。CapsLockなんてほぼ使わないキーなので、ここにSnipping Toolを割り当てた。

結論

AutoHotkey v2で、たった1行書くだけでいい。

#Requires AutoHotkey v2.0
#SingleInstance Force

CapsLock::Send "#+s"

# がWinキー、+ がShift、s がSキーを表す。CapsLockを押すとSnipping Toolが起動する。CapsLock本来の機能は無効化される。

PowerToysという選択肢もある

Microsoft公式のPowerToysにもKeyboard Managerというキーリマップ機能がある。GUIで設定できるので、AutoHotkeyに馴染みがなければこちらのほうが直感的かもしれない。

今回はAutoHotkeyのスクリプトが既にいくつか動いていたので、同じ仕組みに乗せた。

ハマったポイント:v1とv2の構文の違い

AutoHotkey v1とv2は構文が違う。ランチャーがスクリプトの内容を見てバージョンを自動判定するので、どちらで動いているか意識しないとハマる。

v1構文(動かなかった)

; v1スタイル
#NoEnv
CapsLock::Send #+s

#NoEnv はv1専用ディレクティブなので、ランチャーはv1で実行しようとする。ところが手元の環境ではv1がうまく動作しなかった。

v2構文(動いた)

; v2スタイル
#Requires AutoHotkey v2.0
CapsLock::Send "#+s"

v2では Send の引数を文字列リテラル(ダブルクォートで囲む)にする必要がある。#Requires AutoHotkey v2.0 を明示すると確実にv2で実行される。

スタートアップに登録する

毎回手動で起動するのは面倒なので、Windowsのスタートアップフォルダにショートカットを置く。

スタートアップフォルダの場所は Win+Rshell:startup で開ける。フルパスは以下の通り。

C:\Users\{ユーザー名}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

PowerShellでショートカットを作成する場合はこう書く。

$ws = New-Object -ComObject WScript.Shell
$sc = $ws.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\capslock-screenshot.ahk.lnk")
$sc.TargetPath = "C:\path\to\capslock-screenshot.ahk"  # 自分のスクリプトのパスに変更
$sc.Save()

これでPC起動時に自動でCapsLockがスクリーンショットキーになる。

スクリプト全文

; =====================================
; CapsLock → スクリーンショット (Snipping Tool)
; =====================================
#Requires AutoHotkey v2.0
#SingleInstance Force

CapsLock::Send "#+s"

ファイルを capslock-screenshot.ahk として保存し、ダブルクリックで動作を確認する。タスクトレイにAutoHotkeyのアイコンが出れば起動している。