// If there are any keys defined in this file, store them in a dictionary for easy use private void ParseKeyDefs() { List <DitaElement> keyDefElements = RootElement.FindChildren("keydef"); if (keyDefElements != null) { foreach (DitaElement keyDefElement in keyDefElements) { DitaKeyDef keyDef = new DitaKeyDef { Format = keyDefElement.AttributeValueOrDefault("format", ""), Href = keyDefElement.AttributeValueOrDefault("href", ""), Keys = keyDefElement.AttributeValueOrDefault("keys", ""), Scope = keyDefElement.AttributeValueOrDefault("scope", ""), ProcessingRole = keyDefElement.AttributeValueOrDefault("processing-role", ""), Keywords = keyDefElement.ToString() }; if (!KeyDefs.ContainsKey(keyDef.Keys)) { KeyDefs.Add(keyDef.Keys, keyDef); } else { Trace.TraceWarning($"Duplicate keyref {keyDef.Keys}"); } } } }
private void OnKeyExceptCapsLockChanged(GlobalKeyboardHookEventArgs e) { if (e.KeyboardData.VirtualCode == (int)VirtualKey.LeftShift && _status.Replacing == 1) { e.Handled = true; } #region Capslock+Space 实现 左Ctrl+Space if ((VirtualKey)e.KeyboardData.VirtualCode == VirtualKey.Space) { if (e.KeyboardState == KeyboardState.KeyUp || !_status.PressingCapsLock) { return; } _status.Replacing = 1; SendKeySimulatedAndSetStatus(ref _status.ReleasingCapsLockSimulated, false, VirtualKey.CapsLock); SendKeyEvent((int)VirtualKey.LeftControl, 0, 0, UIntPtr.Zero); SendKeyEvent((int)VirtualKey.Space, 0, 0, UIntPtr.Zero); SendKeyEvent((int)VirtualKey.LeftControl, 0, 2, UIntPtr.Zero); _status.Replacing = 2; e.Handled = true; return; } #endregion var keyDef = KeyDefs.FirstOrDefault(x => x.AdditionKey == (VirtualKey)e.KeyboardData.VirtualCode); if (keyDef.Equals(default(KeyDef)) || e.KeyboardState == KeyboardState.KeyUp || !_status.PressingCapsLock) { return; } _status.Replacing = 1; SendKeySimulatedAndSetStatus(ref _status.ReleasingCapsLockSimulated, false, VirtualKey.CapsLock); SendKeyEvent((int)keyDef.AdditionKey, 0, 2, UIntPtr.Zero); SendKeyEvent((int)keyDef.ReplacingKey, 0, 0, UIntPtr.Zero); _status.Replacing = 2; e.Handled = true; }
private void OnKeyExceptCapsLockChanged(GlobalKeyboardHookEventArgs e) { var keyDef = KeyDefs.FirstOrDefault(x => x.AdditionKey == (VirtualKey)e.KeyboardData.VirtualCode); if (keyDef.Equals(default(KeyDef)) || e.KeyboardState == KeyboardState.KeyUp || !_status.PressingCapsLock) { return; } _status.Replacing = 1; SendKeySimulatedAndSetStatus(ref _status.ReleasingCapsLockSimulated, false, VirtualKey.CapsLock); SendKeyEvent((int)keyDef.AdditionKey, 0, 2, UIntPtr.Zero); SendKeyEvent((int)keyDef.ReplacingKey, 0, 0, UIntPtr.Zero); _status.Replacing = 2; e.Handled = true; }