public static Keys CovertToHotKeyModifiersForHelpers(HotKeyHelper.KeyModifiers keys) { Keys modifiers = Keys.None; if (keys.HasFlag(HotKeyHelper.KeyModifiers.Control)) { modifiers = modifiers | Keys.Control; } if (keys.HasFlag(HotKeyHelper.KeyModifiers.Alt)) { modifiers = modifiers | Keys.Alt; } if (keys.HasFlag(HotKeyHelper.KeyModifiers.Shift)) { modifiers = modifiers | Keys.Shift; } if (keys.HasFlag(HotKeyHelper.KeyModifiers.Windows)) { modifiers = modifiers | Keys.LWin; } return(modifiers); }
public static HotKeyHelper.KeyModifiers CovertToHotKeyModifiers(Keys keys) { HotKeyHelper.KeyModifiers modifiers = HotKeyHelper.KeyModifiers.None; if (keys.HasFlag(Keys.Control)) { modifiers = modifiers | HotKeyHelper.KeyModifiers.Control; } if (keys.HasFlag(Keys.Alt)) { modifiers = modifiers | HotKeyHelper.KeyModifiers.Alt; } if (keys.HasFlag(Keys.Shift)) { modifiers = modifiers | HotKeyHelper.KeyModifiers.Shift; } if (keys.HasFlag(Keys.LWin)) { modifiers = modifiers | HotKeyHelper.KeyModifiers.Windows; } return(modifiers); }
/// <summary> /// 构造一个热键。 /// </summary> /// <param name="hand"></param> /// <param name="id"></param> /// <param name="modifiers"></param> /// <param name="key"></param> /// <param name="commond"></param> public HotKeyInfo(IntPtr hand, int id, HotKeyHelper.KeyModifiers modifiers, System.Windows.Forms.Keys key, string commond) { Commond = commond; Key = key; Modifiers = modifiers; ID = id; Hand = hand; }
private void RegiseterHotKey(int hotKeyId, string hotkey) { string[] keys = hotkey.Split('+'); List <HotKeyHelper.KeyModifiers> keyModifiers = new List <HotKeyHelper.KeyModifiers>(); List <string> normalKey = new List <string>(); for (int i = 0; i < keys.Length; i++) { if (keys[i].ToLower() == "ctrl") { keyModifiers.Add(HotKeyHelper.KeyModifiers.Ctrl); } else if (keys[i].ToLower() == "alt") { keyModifiers.Add(HotKeyHelper.KeyModifiers.Alt); } else if (keys[i].ToLower() == "shift") { keyModifiers.Add(HotKeyHelper.KeyModifiers.Shift); } else { normalKey.Add(keys[i]); } } if (normalKey.Count == 1) // { Keys norKey = Keys.D1; int key = 0; try { if (int.TryParse(normalKey[0], out key)) { norKey = (Keys)System.Enum.Parse(typeof(Keys), "D" + normalKey[0]); } else { norKey = (Keys)System.Enum.Parse(typeof(Keys), normalKey[0]); } } catch (Exception) { return; } HotKeyHelper.KeyModifiers sysKeyModifiers = HotKeyHelper.KeyModifiers.None; for (int i = 0; i < keyModifiers.Count; i++) { sysKeyModifiers |= keyModifiers[i]; } HotKeyHelper.UnregisterHotKey(handle, hotKeyId); HotKeyHelper.RegisterHotKey(handle, hotKeyId, sysKeyModifiers, norKey); } }
protected override void WndProc(ref Message message) { switch (message.Msg) { case HotKeyHelper.WM_HOTKEY: { Keys key = (Keys)(((int)message.LParam >> 16) & 0xFFFF); HotKeyHelper.KeyModifiers modifier = (HotKeyHelper.KeyModifiers)((int)message.LParam & 0xFFFF); if (keysTextBox시작_키.Focused) { keysTextBox시작_키.SelectedKeys = key | KeysHelper.CovertToHotKeyModifiersForHelpers(modifier); break; } if (keysTextBox종료_키.Focused) { keysTextBox종료_키.SelectedKeys = key | KeysHelper.CovertToHotKeyModifiersForHelpers(modifier); break; } var startKeys = KeysHelper.ClearModifiers(keysTextBox시작_키.SelectedKeys); var startModifiers = KeysHelper.CovertToHotKeyModifiers(keysTextBox시작_키.SelectedKeys); var endKeys = KeysHelper.ClearModifiers(keysTextBox종료_키.SelectedKeys); var endModifiers = KeysHelper.CovertToHotKeyModifiers(keysTextBox종료_키.SelectedKeys); //if ((HotKeyHelper.KeyModifiers.Control | HotKeyHelper.KeyModifiers.Shift) == modifier && Keys.N == key) //if ((HotKeyHelper.KeyModifiers.None) == modifier && Keys.F4 == key) if (startModifiers == modifier && startKeys == key) { // 시작 키, 종료 키가 같을 경우에는 토글 if (startKeys == endKeys && startModifiers == endModifiers) { ToggleMacro(); } else { StartMacro(); } } else if (endModifiers == modifier && endKeys == key) { EndMacro(); } } break; } base.WndProc(ref message); }
/// <summary> /// 启用老板键 /// </summary> private void EnableHotKey() { System.Windows.Forms.Keys k = (System.Windows.Forms.Keys)Enum.Parse(typeof(System.Windows.Forms.Keys), DataUtil.Config.sysConfig.hotKey.ToString().ToUpper()); HotKeyHelper.KeyModifiers m = HotKeyHelper.KeyModifiers.None; if (DataUtil.Config.sysConfig.hotKeyCtrl) { m = HotKeyHelper.KeyModifiers.Ctrl; } if (DataUtil.Config.sysConfig.hotKeyAlt) { if (m == HotKeyHelper.KeyModifiers.None) { m = HotKeyHelper.KeyModifiers.Alt; } else { m = m | HotKeyHelper.KeyModifiers.Alt; } } if (DataUtil.Config.sysConfig.hotKeyShift) { if (m == HotKeyHelper.KeyModifiers.None) { m = HotKeyHelper.KeyModifiers.Shift; } else { m = m | HotKeyHelper.KeyModifiers.Shift; } } IntPtr handle = new WindowInteropHelper(this).Handle; if (HotKeyHelper.isRegistered) { HotKeyHelper.UnregisterHotKey(handle, HotKeyHelper.hotKeyId); } HotKeyHelper.isRegistered = HotKeyHelper.RegisterHotKey(handle, HotKeyHelper.hotKeyId, m, k); HotKeyHelper.InstallHotKeyHook(this); }