Skip to main content

Windows ホットキー登録

詳細を未確認

登録する方法 N 選

#方法説明メリット注意点
1Win32 API(RegisterHotKey)システムワイドなホットキー登録が可能。C#/C++/PowerShell などで利用可能。OS全体で動作/バックグラウンド可アプリ常駐が必要(プロセス終了で無効)
2PowerShell + Add-Type で Win32 API 呼び出しPowerShellスクリプトからRegisterHotKey を使う GUIツールと組み合わせやすい権限/多重登録の管理が必要
3AutoHotkey専用スクリプトでキー操作をフックして任意処理を実行記述が簡単/柔軟導入が必要/実行中でないと無効
4C# WinForms/WPF アプリRegisterHotKey によりGUIアプリ内で登録.NETアプリとの統合が容易WndProc の実装が必要
5Windows タスクスケジューラ(ショートカットにホットキー割当).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("ホットキーが押されました")
}
}
}