0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AutoHotkey v2で「アプリ別ショートカット表」を最前面オーバーレイ表示する

0
Posted at

きっかけ

ショートカットキーって「覚えたつもり」でも、いざ使おうとすると出てこない。
そこで Windows 上に自分用のショートカット表を常時表示したい。また、VS Code / Chrome / Windows など いま操作しているアプリに応じて表示内容が自動で切り替えられないかなぁと、いろいろ調べてみたところAutoHotkey v2でできるようなので試してみた。

できること

  • オーバーレイ表示(最前面)

  • クリック透過(オーバーレイがあっても下のアプリ操作を邪魔しない)

  • ホットキーで表示/非表示トグル

  • アクティブなアプリ(exe)に応じて表示内容を自動切替

    • VS Code → Code.exe
    • Chrome → chrome.exe
    • その他 → Windows基本ショートカット

前提

  • 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 を前面にすると表示内容が自動で切り替わる

ログイン後に自動起動させる(毎回ダブルクリック不要)

  1. Win + Rshell:startup → Enter
  2. 開いたスタートアップフォルダに、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 を使う
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?