/// <summary> /// 注销热键 - 完成后,会清零 HotKeyID /// </summary> /// <param name="item">The item.</param> /// <exception cref="ArgumentNullException">item</exception> public void UnRegKey(HotKeyItem item) { if (item is null) { throw new ArgumentNullException(nameof(item)); } if (item.HotKeyID == 0) { return; } AppHotKey.UnRegKey(FormHandle, item.HotKeyID); item.HotKeyID = 0; }
/// <summary> /// 注册热键 - 成功后,会设置 HotKeyID /// </summary> /// <param name="item">The item.</param> /// <exception cref="ArgumentNullException"> /// item /// or /// HotKey - 热键不能为空! /// </exception> /// <exception cref="InvalidOperationException"> /// 功能键不能为空! /// or /// 快捷键不能为空! /// </exception> public void RegKey(HotKeyItem item) { if (item is null) { throw new ArgumentNullException(nameof(item)); } if (string.IsNullOrWhiteSpace(item.HotKey)) { throw new ArgumentNullException(nameof(item.HotKey), "热键不能为空!"); } // 如果注册过该热键,ID不为0。卸载热键会将ID置零。 if (item.HotKeyID != 0) { return; } int id = Interlocked.Increment(ref _RegMaxID); var keys = item.HotKey.Split('+'); Keys keyCode = Keys.None; AppHotKey.KeyModifiers keyModifiers = AppHotKey.KeyModifiers.None; foreach (var key in keys) { switch (key.ToLower()) { case "ctrl": keyModifiers |= AppHotKey.KeyModifiers.Ctrl; break; case "shift": keyModifiers |= AppHotKey.KeyModifiers.Shift; break; case "alt": keyModifiers |= AppHotKey.KeyModifiers.Alt; break; case "win": keyModifiers |= AppHotKey.KeyModifiers.WindowsKey; break; default: keyCode = (Keys)Enum.Parse(typeof(Keys), key); break; } } if (keyModifiers == AppHotKey.KeyModifiers.None) { throw new InvalidOperationException("功能键不能为空!"); } if (keyCode == Keys.None) { throw new InvalidOperationException("快捷键不能为空!"); } AppHotKey.RegKey(FormHandle, id, keyModifiers, keyCode); item.HotKeyID = id; }