きっかけ
ショートカットキーって「覚えたつもり」でも、いざ使おうとすると出てこない。
そこで Windows 上に自分用のショートカット表を常時表示したい。また、VS Code / Chrome / Windows など いま操作しているアプリに応じて表示内容が自動で切り替えられないかなぁと、いろいろ調べてみたところAutoHotkey v2でできるようなので試してみた。
できること
-
オーバーレイ表示(最前面)
-
クリック透過(オーバーレイがあっても下のアプリ操作を邪魔しない)
-
ホットキーで表示/非表示トグル
-
アクティブなアプリ(exe)に応じて表示内容を自動切替
- VS Code →
Code.exe - Chrome →
chrome.exe - その他 → Windows基本ショートカット
- VS Code →
前提
- AutoHotkey v2 を使用(v1では動かない書き方が含まれる)
- Windows 10/11
セットアップ手順
1) AutoHotkey v2 をインストール
AutoHotkey v2 をインストールする。
2) shortcut_overlay.ahk を作成
任意フォルダに shortcut_overlay.ahk を作り、以下を貼り付けて保存する。
Ctrl + Alt + /で表示/非表示を切り替え。
クリック透過、アプリ別表示切替も込み。
#Requires AutoHotkey v2.0
#SingleInstance Force
; ===== 設定 =====
toggleHotkey := "^!/" ; Ctrl + Alt + /
opacity := 115 ; 0-255(小さいほど薄い)
width := 560
margin := 14
pollMs := 250 ; アクティブアプリ判定の間隔
; ===== アプリ別チートシート =====
global cheats := Map()
cheats["Code.exe"] := "
(
VS Code(よく使う)
- Ctrl+P クイックオープン(ファイルへ)
- Ctrl+Shift+P コマンドパレット
- Ctrl+` ターミナル表示/非表示
- Ctrl+Shift+` 新しいターミナル
- Ctrl+B サイドバー表示/非表示
- Ctrl+Shift+E エクスプローラー
- Ctrl+Shift+F 検索(プロジェクト内)
- Ctrl+F / Ctrl+H 検索 / 置換
- F2 リネーム
- Alt+Shift+F ドキュメント整形
- Ctrl+. クイックフィックス
- Ctrl+Shift+O シンボルへ移動
)"
cheats["chrome.exe"] := "
(
Chrome(よく使う)
- Ctrl+L アドレスバーへ
- Ctrl+T 新規タブ
- Ctrl+W タブを閉じる
- Ctrl+Shift+T 閉じたタブを戻す
- Ctrl+Tab 次のタブ
- Ctrl+Shift+Tab 前のタブ
- Ctrl+1..8 左からn番目のタブ
- Ctrl+9 最後のタブ
- Ctrl+R / F5 再読み込み
- Ctrl+Shift+R 強制再読み込み
- Ctrl+F ページ内検索
- Ctrl+D ブックマーク追加
- Ctrl+J ダウンロード
- Ctrl+Shift+N シークレット
- Ctrl+Shift+I DevTools
)"
cheats["default"] := "
(
Windows 基本(よく使う)
- Win スタート
- Win+E エクスプローラー
- Win+D デスクトップ表示
- Win+L ロック
- Win+I 設定
- Win+R 「ファイル名を指定して実行」
- Win+S 検索
- Win+V クリップボード履歴
- Win+Tab タスクビュー
- Alt+Tab アプリ切替
- Alt+F4 ウィンドウを閉じる
- Ctrl+Shift+Esc タスクマネージャー
- Win+Shift+S 画面切り取り
- Win+←/→/↑/↓ ウィンドウ整列(スナップ)
)"
; ===== GUI =====
global gVisible := true
global gLastExe := ""
global gGui := Gui("+AlwaysOnTop -Caption +ToolWindow")
gGui.BackColor := "202225"
gGui.SetFont("s11", "Meiryo UI")
; r18 が重要:高さが無いと1行しか表示されない
global gText := gGui.AddText("cFFFFFF w" width " r18", "")
; 右上に配置
x := A_ScreenWidth - width - margin
y := margin
; クリック透過(下のアプリを普通に操作できる)
; WS_EX_TRANSPARENT(0x20)
ex := WinGetExStyle(gGui.Hwnd)
WinSetExStyle(ex | 0x20, gGui.Hwnd)
; 透過(環境によっては後述の WinSetTransparent が必要)
gGui.Opacity := opacity
; 初回表示
UpdateContent(true)
gGui.Show("x" x " y" y " NoActivate")
; 表示/非表示トグル
Hotkey(toggleHotkey, (*) => Toggle())
; 表示中だけアクティブアプリを監視して内容更新
SetTimer(UpdateIfVisible, pollMs)
return
Toggle() {
global gVisible, gGui
gVisible := !gVisible
if (gVisible) {
UpdateContent(true)
gGui.Show("NoActivate")
} else {
gGui.Hide()
}
}
UpdateIfVisible() {
global gVisible
if (gVisible) {
UpdateContent()
}
}
UpdateContent(force := false) {
global cheats, gText, gLastExe
exe := ActiveExe()
if (!force && exe = gLastExe) {
return
}
gLastExe := exe
content := cheats.Has(exe) ? cheats[exe] : cheats["default"]
gText.Value := content
}
ActiveExe() {
try {
pid := WinGetPID("A")
return ProcessGetName(pid)
} catch {
return "default"
}
}
3) 実行
shortcut_overlay.ahk をダブルクリックで起動。
-
Ctrl + Alt + /で表示/非表示をトグル - VS Code / Chrome を前面にすると表示内容が自動で切り替わる
ログイン後に自動起動させる(毎回ダブルクリック不要)
-
Win + R→shell:startup→ Enter - 開いたスタートアップフォルダに、
shortcut_overlay.ahkの ショートカットを置く
4) opacity を変えても透過が変わらない
環境によって gGui.Opacity := opacity が効かないことがある。
その場合は WinSetTransparent で強制適用する。
修正案(Showの直後に追記)
gGui.Show("x" x " y" y " NoActivate")
WinSetTransparent(opacity, gGui.Hwnd)
変更しやすいポイント
- 表示内容:
cheats["Code.exe"]の文字列を編集 - 対象アプリ追加:
cheats["EXCEL.EXE"] := "..."のように足す - 位置:
x, yを変える(左上にしたいならx := margin) - 更新間隔:
pollMsを調整
まとめ
- AHK v2 で「アプリ別チートシート」を最前面に出せる
- クリック透過にすれば普段の操作を邪魔しない
- スタートアップに入れればログイン後に自動起動
- 透過が効かない場合は
WinSetTransparentを使う