#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 注册快捷键回调
/// <summary>
/// 快捷键消息处理
/// </summary>
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