csharp WPF注册系统热键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp WPF注册系统热键相关的知识,希望对你有一定的参考价值。

    internal static class HotKeyManager    {        private static IntPtr hwnd = IntPtr.Zero;        private static Dictionary<int, Action> hotkeyAction = new Dictionary<int, Action>();        public static void Init()        {            var source = HwndSource.FromHwnd(new WindowInteropHelper(App.Current.MainWindow).Handle);            source.AddHook(WndProc);            hwnd = source.Handle;        }        public static void UnInit()        {            var keys = hotkeyAction.Keys.ToList();            foreach (var id in keys)            {                UnRegister(id);            }        }        public static bool Register(int id, KeyModifiers control, Keys vk, Action action)        {            if (hwnd == IntPtr.Zero)            {                throw new Exception("No Init");            }            var isOk = Win32.RegisterHotKey(hwnd, id, (uint)control, vk);            if (isOk)            {                hotkeyAction.Add(id, action);                return true;            }            else            {                return false;            }        }        public static void UnRegister(int id)        {            if (hwnd != IntPtr.Zero)            {                if (hotkeyAction.ContainsKey(id))                {                    Win32.UnregisterHotKey(hwnd, id);                    hotkeyAction.Remove(id);                }            }        }        private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)        {            if (msg == 0x0312)            {                if (hotkeyAction.ContainsKey(wParam.ToInt32()))                {                    hotkeyAction[wParam.ToInt32()]();                }            }            return IntPtr.Zero;        }    }

以上是关于csharp WPF注册系统热键的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 WPF 和 .NET 3.5 注册全局热键以说出 CTRL+SHIFT+(LETTER)?

注册系统热键

WPF 窗体快捷键(热键)

WPF 窗体快捷键(热键)

C# winform 程序在后台运行 点击快捷键使程序做出相应反应。

WPF中的自定义热键