Amazonで商品を見るセール会場へ

AutoHotkey v2|ショートカット設定をINIへ保存する方法と練習例

eyecatch-autohotkey

AutoHotkey v2のキー設定は、IniReadとIniWriteでINIファイルに保存できます。

INIは、設定名と値を組にして記録するテキスト形式です。

この記事の例は、メモ帳で使うCtrl+Alt+1〜9から3つを選びます。

画面で保存した設定は、スクリプトを再起動すると反映されます。

既存INIを更新するときはバックアップを作り、重複したキーや空欄は保存しません。

AutoHotkey v2用の練習コードです。

v1構文の既存スクリプトへ混ぜず、新しいフォルダーで試してください。

目次

INIに保存する前の確認順

最初に、設定の読込・保存・復元の順番を確認します。

  1. AutoHotkey v2を用意し、練習用ZIPを新しいフォルダーに展開する。既存の自分用スクリプトとは、別の場所で試す。
  2. スクリプトと同じ場所のINIファイルから、ショートカットの設定を読み込む。INIがない場合は、初期値(Ctrl+Alt+1/2/3)を使い、まだファイルは書かない。
  3. GUIで設定を入力して保存する。重複、空欄、範囲外の入力は、保存時に確認される。
  4. 既存のINIを更新するときだけバックアップができる。初回保存では元のINIがないため作られない。再起動して設定の反映を確認する。
  5. キーの指定にVKやSCを使う場合は、公式のキー一覧とKeyHistoryで確認する。無変換などの値は、キーボードやIMEの環境によって異なる。
  6. 元に戻すときは、現在のsettings.iniを別名で保管してから、settings.ini.backupをsettings.iniへコピーして、再起動する。

GUIのクリック、メモ帳へのキー入力、最小化の動作は、ページではまだ実機確認していません。

お使いの環境で、まず練習用のウィンドウで確認してください。

スポンサーリンク

v2の練習ファイルと確認できた範囲

練習用ZIPをダウンロードし、新しいフォルダーに展開します。

公式のAutoHotkey v2を用意し、既存の自分用スクリプトとは別の場所で試してください。

2026年10月3日の検証記録では、AutoHotkey 2.0.28の実ランタイムでINIの読み書き、入力拒否、バックアップの内容一致を確認しています。

2026年10月24日は本文と配布コードの一致および公式仕様を再確認しましたが、実ランタイムの試験は再実行していません。

以下のGUIクリック、メモ帳へのキー入力、最小化はまだ実機確認していません。

所有練習ファイルで実行したAutoHotkey v2のINI読み書き・重複拒否・バックアップ一致の結果画面
AutoHotkey 2.0.28の実関数で12項目を確認し、結果をブラウザーに表示した実画面(2026/10/03)。GUI操作やキー押下を撮影した画面ではありません。
入力の状態処理結果次の操作
INIがないCtrl+Alt+1/2/3を初期値にするまだファイルを書かない
重複・空欄・範囲外保存しない入力を直す
既存INIを更新元の内容を.backupへ保存閉じて復元できる
.backupが既にある追加の保存を止める元のバックアップを別の場所に保管する

スクリプトと同じ場所に保存するINI処理

binding_store.ahkを次の内容で保存します。

Ctrl+Alt+1~9の組み合わせだけを受け付け、3つのキーが重複する場合は書き込みを止めます。

#Requires AutoHotkey v2.0

NormalizeBindings(values) {
    if values.Length != 3
        throw ValueError("Exactly three shortcuts are required")
    result := []
    seen := Map()
    for value in values {
        value := Trim(value)
        if !RegExMatch(value, "^(?:\^!|!\^)([1-9])$", &match)
            throw ValueError("Use Ctrl+Alt+1 through Ctrl+Alt+9")
        key := "^!" match[1]
        if seen.Has(key)
            throw ValueError("Duplicate shortcut")
        seen[key] := true
        result.Push(key)
    }
    return result
}

ReadBindings(path) {
    if !FileExist(path)
        return ["^!1", "^!2", "^!3"]
    values := []
    Loop 3
        values.Push(IniRead(path, "Script" A_Index, "hotkey", ""))
    return NormalizeBindings(values)
}

SaveBindings(values, path) {
    values := NormalizeBindings(values)
    if FileExist(path ".backup")
        throw Error("Backup already exists; preserve it before another save")
    temp := path ".new-" A_TickCount
    if FileExist(temp)
        throw Error("Temporary output already exists")
    if FileExist(path)
        FileCopy(path, path ".backup", false)
    Loop 3
        IniWrite(values[A_Index], temp, "Script" A_Index, "hotkey")
    FileMove(temp, path, true)
    return values
}

既存のsettings.iniを書き換える前に、settings.ini.backupへ同じ内容をコピーします。

初回保存では元ファイルがないため、バックアップは作りません。

この例はScript1〜Script3のhotkeyだけを新しいINIへ書き出し、ファイル全体を置き換えます。

別の設定やコメントを保持する汎用INI編集ではないため、既存の自分用INIへそのまま流用しないでください。

保存途中の.new-番号ファイルが残った場合は、アプリを閉じて元INIとバックアップを確認し、その場で連続保存を試さないでください。

同じINIへ複数のスクリプトから同時に書き込む運用も対象外です。

GUIで保存し、再起動後に反映する

同じフォルダーにshortcut_gui.ahkを保存して起動します。

初期値のCtrl+Alt+1/2/3を、たとえばCtrl+Alt+4/5/6へ変更して保存します。

#Requires AutoHotkey v2.0
#SingleInstance Force
#Include binding_store.ahk

iniPath := A_ScriptDir "\settings.ini"
try values := ReadBindings(iniPath)
catch as err {
    MsgBox "設定を読み込めません。元のINIを確認してください。`n" err.Message
    ExitApp
}

; メモ帳が前面のときだけ、保存済みキーを有効にする。
HotIfWinActive("ahk_exe notepad.exe")
for index, key in values
    Hotkey(key, Demo.Bind(index))
HotIf()

window := Gui(, "練習ショートカット設定")
window.AddText(, "Ctrl+Alt+1~9から、重複しない3つを選びます。")
inputs := []
for index, key in values {
    window.AddText("xm", "練習 " index)
    inputs.Push(window.AddHotkey("x+15 w160", key))
}
window.AddButton("xm w210", "保存(次回起動から反映)").OnEvent("Click", Save)
window.OnEvent("Close", (*) => ExitApp())
window.Show()

Demo(index, *) {
    MsgBox "練習 " index " のショートカットです。"
}

Save(*) {
    global inputs, iniPath
    selected := []
    for control in inputs
        selected.Push(control.Value)
    try {
        SaveBindings(selected, iniPath)
        MsgBox "保存しました。画面を閉じて再起動すると反映されます。"
    } catch as err {
        MsgBox "保存できませんでした。`n" err.Message
    }
}

保存直後のキー割り当ては変えません。

画面を閉じてスクリプトを再起動し、メモ帳を前面にしたときだけ、新しいキーで練習メッセージが出ることを確認します。

メモ帳以外ではこの練習キーを割り当てませんが、メモ帳自身のショートカットとは競合し得ます。

最初は保存不要の練習文書で試し、重要な文書を編集しながら実行しないでください。

VKとSCを調べるときの注意点

スキャンコードのsc形式は、現在もキー指定に使えます。

以前の「1.1.27以降はsc形式が利用できない」という説明は誤りでした。

公式キー一覧でVKとSCの違いを確認し、KeyHistoryの該当列を見て指定します。

無変換などの実際の値はキーボード・IMEの環境によるため、本文の値だけで決めないでください。

別アプリの最小化はPIDと待ち時間で限定する

従来のLINEやChromeの例は、同じクラス名の別ウィンドウを対象にしたり、画面が現れなければ無限に待ったりする可能性がありました。

次は指定したEXEを起動し、そのPIDの画面を最大10秒待って最小化するv2の例です。

#Requires AutoHotkey v2.0
if A_Args.Length != 1 || !FileExist(A_Args[1]) {
    MsgBox "対象アプリの実在するEXEパスを1つ指定してください。"
    ExitApp
}
; 既に動作中のアプリへ合流すると、PIDが一致しない場合がある。
Run('"' A_Args[1] '"', , , &pid)
hwnd := WinWait("ahk_pid " pid, , 10)
if !hwnd {
    MsgBox "10秒以内に、このPIDの画面を確認できませんでした。"
    ExitApp
}
WinMinimize("ahk_id " hwnd)
; ウィンドウを閉じず、最小化だけを行う。

minimize_started.ahkには、対象EXEのフルパスを引数として1つ渡します。

コマンドプロンプトを開き、次の3つのパスを実在する場所に置き換えて実行します。

"C:\Program Files\AutoHotkey\v2\AutoHotkey64.exe" "C:\AHK練習\minimize_started.ahk" "C:\対象アプリ\App.exe"

この例は64ビット版のパス例であり、インストール先は環境に合わせてください。

空白を含むパスが分割されないように、それぞれを二重引用符で囲みます。

対象のウィンドウが最小化されるか、10秒後に確認できない旨が表示されるかを確認します。

EXEを起動できない場合は、待機処理の前にエラーで止まることがあります。

パスと実行権限を確認し、別プロセスに合流するアプリの制約とは分けて調べます。

既に動作中のアプリに合流する場合や、別プロセスで画面を作るアプリでは、10秒で確認できず終了することがあります。

閉じる操作と最小化は別です。

この例はWinCloseを使わず、LINEがトレイへ移る動作も保証しません。

引数の渡し方は公式のコマンドライン仕様、PIDと起動失敗の扱いはRunを参照してください。

10秒の待機とタイムアウト時の戻り値は、WinWaitの公式仕様に基づきます。

元の設定へ戻す方法

練習画面を閉じると、このスクリプトのキー割り当ては終了します。

バックアップがある場合は、現在のsettings.iniを別名で保管してからsettings.ini.backupをsettings.iniへコピーし、再起動します。

初回保存から初期値へ戻す場合は、スクリプトを終了してsettings.iniを別名で退避し、INIがない状態で起動します。

スタートアップへの登録は、手動の練習ができてから検討します。

この記事の検証では登録しておらず、OSのキー設定も変更していません。

キーの適用範囲だけを変えたい場合はWin+Q・Win+Wをアプリ限定で割り当てる方法、WindowsとMacの共有パスは共有パス変換の記事を参照してください。

関連するWindows操作と従来の参考資料

以前の関連記事と外部コードの参照先です。

旧コードと本稿の練習ファイルは内容が異なるため、今回の手順では本稿のファイルを使います。

スポンサーリンク

保存や読み込みに失敗したとき

保存先はA_ScriptDirで指定しているため、起動時の作業フォルダーではなくスクリプトと同じ場所です。

ZIP内のshortcut_gui.ahkとbinding_store.ahkを同じフォルダーに置き、書き込み可能な場所で試します。

設定が読めない場合は、settings.iniのScript1〜Script3にhotkeyがあり、値が重複していないかを確認してください。

INI全体がない場合だけ初期値を使い、既存INIの項目欠落や不正値では読み込みを止めます。

.backupが存在するときは、現在のINIも別名で保管してから、バックアップを別の場所へ移します。

コピーするだけでは元の.backupが残るため、次の保存は引き続き拒否されます。

保存途中の一時ファイルや権限エラーがある場合は、元INIとバックアップを確認してから復旧します。

IniReadの既定値と、IniWriteの保存先・エラー仕様を2026年10月26日に公式資料で確認しました。

本文3本と配布ZIPのコード一致は確認しましたが、今回GUI・キー入力・最小化の実動作試験は行っていません。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

仕事効率化のおすすめ書籍

仕事用PCの選び方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次