WPF窗口中注册快捷键

region 系统api

// 注册快捷键
private IntPtr _hWnd = IntPtr.Zero;
private readonly int _hotkeyID = 0x666;
private const int WM_HOTKEY = 0x312;

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool RegisterHotKey(IntPtr hWnd, int id, HotkeyModifiers fsModifiers, uint vk);

[DllImport("user32.dll")]
static extern bool UnregisterHotKey(IntPtr hWnd, int id);

private Window _fullScreenWindow;

endregion

private void FullScreenWindow_Loaded(object sender, RoutedEventArgs e)
{
// 注册快捷键
_hWnd = new WindowInteropHelper(_fullScreenWindow).Handle;
var hwndSource = HwndSource.FromHwnd(_hWnd);
hwndSource.AddHook(WndProc);
var vk = KeyInterop.VirtualKeyFromKey(Key.F11);
if (!RegisterHotKey(_hWnd, _hotkeyID, HotkeyModifiers.NoRepeat, (uint)vk))
{
throw new Exception("注册快捷键“F11”失败");
}
}

region 注册快捷键回调

///


/// 快捷键消息处理
///

private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == WM_HOTKEY)
{
int id = wParam.ToInt32();
if (id == _hotkeyID)
{
_fullScreenWindow.DialogResult = true;
}
}
return IntPtr.Zero;
}

endregion

region 类型定义

[Flags]
enum HotkeyModifiers
{
None = 0,
Alt = 1,
Control = 2,
Shift = 4,
Windows = 8
}
#endregion

posted @ 2023-11-20 14:17  逍遥岚轩  阅读(94)  评论(0)    收藏  举报