Windows ホットキー登録
詳細を未確認
登録する方法 N 選
# | 方法 | 説明 | メリット | 注意点 |
---|---|---|---|---|
1 | Win32 API(RegisterHotKey) | システムワイドなホットキー登録が可能。C#/C++/PowerShell などで利用可能。 | OS全体で動作/バックグラウンド可 | アプリ常駐が必要(プロセス終了で無効) |
2 | PowerShell + Add-Type で Win32 API 呼び出し | PowerShellスクリプトから | RegisterHotKey を使う GUIツールと組み合わせやすい | 権限/多重登録の管理が必要 |
3 | AutoHotkey | 専用スクリプトでキー操作をフックして任意処理を実行 | 記述が簡単/柔軟 | 導入が必要/実行中でないと無効 |
4 | C# WinForms/WPF アプリ | RegisterHotKey によりGUIアプリ内で登録 | .NETアプリとの統合が容易 | WndProc の実装が必要 |
5 | Windows タスクスケジューラ(ショートカットにホットキー割当) | .lnk のプロパティで手動登録可能 | ユーザー向けに簡単 | Ctrl + Alt + 任意 限定 |
ショートカットにホットキー割当する方法もあるが、
- 「Ctrl + Alt + 任意のキー」限定
- デスクトップ、スタートメニューと、そのサブフォルダ内のみ有効
PowerShell でのカスタムホットキー登録(例)
ps1
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class HotKeyManager {
[DllImport("user32.dll")] public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
[DllImport("user32.dll")] public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
}
"@
$modifiers = 0x0003 # MOD_CONTROL (0x2) + MOD_ALT (0x1)
$vk = 0x47 # Gキー
$id = 1
$nullPtr = [IntPtr]::Zero
[HotKeyManager]::RegisterHotKey($nullPtr, $id, $modifiers, $vk) | Out-Null
メッセージループ
ps1
while ($true) {
$msg = New-Object Windows.Forms.Message
if ([System.Windows.Forms.NativeWindow]::GetMessage([ref]$msg, [IntPtr]::Zero, 0, 0)) {
if ($msg.message -eq 0x0312) { # WM_HOTKEY
[System.Windows.Forms.MessageBox]::Show("ホットキーが押されました")
}
}
}