/// <summary> /// Triggers the key press. /// </summary> /// <param name="nativeKeyCode">The native key code.</param> /// <param name="modifiers">The modifiers.</param> /// <param name="keyEventType">Type of the key event.</param> internal void TriggerKeyPress(int nativeKeyCode, CefEventFlags modifiers, CefKeyEventType keyEventType) { if (KeyPress != null) { KeyPress(this, new KeyPressEventArgs(nativeKeyCode, modifiers, keyEventType)); } }
/// <summary> /// Translates a virtual key to the corresponding native key code for the current keyboard. /// </summary> /// <param name="eventType">The key event type.</param> /// <param name="repeatCount">The repeat count for a message.</param> /// <param name="modifiers">A bitwise combination of the <see cref="CefEventFlags"/> values.</param> /// <param name="key">The virtual key.</param> /// <param name="isExtended">The extended key flag.</param> /// <returns>A native key code for the current keyboard.</returns> public static int GetNativeKeyCode(CefKeyEventType eventType, int repeatCount, VirtualKeys key, CefEventFlags modifiers, bool isExtended) { if (PlatformInfo.IsWindows) { return(GetWindowsNativeKeyCode(eventType, repeatCount, (byte)NativeMethods.MapVirtualKey((uint)key, MapVirtualKeyType.MAPVK_VK_TO_VSC), modifiers.HasFlag(CefEventFlags.AltDown), isExtended)); } if (PlatformInfo.IsLinux) { return(GetLinuxNativeKeyCode(key, modifiers.HasFlag(CefEventFlags.ShiftDown))); } return(0); }
/// <summary> /// Translates a virtual key to the corresponding native key code for the current keyboard. /// </summary> /// <param name="eventType">The key event type.</param> /// <param name="repeatCount">The repeat count for a message.</param> /// <param name="scanCode">The scan code for a key.</param> /// <param name="isSystemKey">The system key flag.</param> /// <param name="isExtended">The extended key flag.</param> /// <returns>A native key code for the current keyboard.</returns> public static int GetWindowsNativeKeyCode(CefKeyEventType eventType, int repeatCount, byte scanCode, bool isSystemKey, bool isExtended) { if (repeatCount < 0) { throw new ArgumentOutOfRangeException(nameof(repeatCount)); } //const int KF_MENUMODE = 0x1000; // 28 bit //const int KF_DLGMODE = 0x0800; // 27 bit //0x400 not used 26 bit //0x200 not used 25 bit const int KF_EXTENDED = 0x100; // 24 bit const int KF_ALTDOWN = 0x2000; // 29 bit const int KF_UP = 0x8000; // 31 bit const int KF_REPEAT = 0x4000; // 30 bit int keyInfo = scanCode; if (eventType == CefKeyEventType.KeyUp) { repeatCount = 1; keyInfo |= KF_UP; } if (repeatCount > 0) { keyInfo |= KF_REPEAT; } else { repeatCount = 1; } if (isSystemKey) { keyInfo |= KF_ALTDOWN; } if (isExtended) { keyInfo |= KF_EXTENDED; } return((keyInfo << 16) | (repeatCount & 0xFFFF)); }
private void SendKeyChange(CefKeyEventType eventType, char c, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int repeatCount, bool extendedKey) { CefBrowserHost browserHost = this.BrowserObject?.Host; if (browserHost is null) { return; } CefEventFlags modifiers = CefEventFlags.None; if (KeycodeConverter.IsShiftRequired(c)) { shiftKey = !shiftKey; } VirtualKeys key = KeycodeConverter.CharacterToVirtualKey(c); if (shiftKey) { modifiers |= CefEventFlags.ShiftDown; } if (altKey) { modifiers |= CefEventFlags.AltDown; } if (ctrlKey) { modifiers |= CefEventFlags.ControlDown; } if (metaKey) { modifiers |= CefEventFlags.CommandDown; } var k = new CefKeyEvent(); k.Type = eventType; k.Modifiers = (uint)modifiers; k.IsSystemKey = altKey; k.WindowsKeyCode = (int)key; k.NativeKeyCode = KeycodeConverter.VirtualKeyToNativeKeyCode(key, modifiers, extendedKey); k.Character = c; k.UnmodifiedCharacter = c; this.BrowserObject?.Host?.SendKeyEvent(k); }
private void SendKeyChange(CefKeyEventType eventType, VirtualKeys key, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, int repeatCount, bool extendedKey) { if (key < VirtualKeys.None || key > VirtualKeys.OemClear) { throw new ArgumentOutOfRangeException(nameof(key)); } CefBrowserHost browserHost = this.BrowserObject?.Host; if (browserHost is null) { return; } CefEventFlags modifiers = CefEventFlags.None; if (shiftKey) { modifiers |= CefEventFlags.ShiftDown; } if (altKey) { modifiers |= CefEventFlags.AltDown; } if (ctrlKey) { modifiers |= CefEventFlags.ControlDown; } if (metaKey) { modifiers |= CefEventFlags.CommandDown; } var k = new CefKeyEvent(); k.Type = eventType; k.Modifiers = (uint)modifiers; k.IsSystemKey = altKey; k.WindowsKeyCode = (int)key; k.NativeKeyCode = KeycodeConverter.VirtualKeyToNativeKeyCode(key, modifiers, extendedKey); k.Character = (char)key; k.UnmodifiedCharacter = (char)key; this.BrowserObject?.Host?.SendKeyEvent(k); }
/// <summary> /// Translates a virtual key to the corresponding native key code for the current keyboard. /// </summary> /// <param name="isRepeat">The repeat flag.</param> /// <param name="eventType">The key event type.</param> /// <param name="modifiers">A bitwise combination of the <see cref="CefEventFlags"/> values.</param> /// <param name="key">The virtual key.</param> /// <param name="isExtended">The extended key flag.</param> /// <returns>A native key code for the current keyboard.</returns> public static int ToNativeKeyCode(this VirtualKeys key, CefKeyEventType eventType, bool isRepeat, CefEventFlags modifiers, bool isExtended) { return(CefNetApi.GetNativeKeyCode(eventType, isRepeat ? 1 : 0, key, modifiers, isExtended)); }
/// <summary> /// Initializes a new instance of the <see cref="KeyPressEventArgs"/> class. /// </summary> /// <param name="nativeKeyCode">The native key code.</param> /// <param name="modifiers">The modifiers.</param> /// <param name="keyEventType">Type of the key event.</param> public KeyPressEventArgs(int nativeKeyCode, CefEventFlags modifiers, CefKeyEventType keyEventType) { NativeKeyCode = nativeKeyCode; Modifiers = modifiers; KeyEventType = keyEventType; }