Example #1
0
 /// <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));
     }
 }
Example #2
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="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);
        }
Example #3
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));
 }
Example #7
0
 /// <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;
 }