예제 #1
0
        protected override bool OnKeyPress(KeyPressEvent e)
        {
            if (Focused && IsEnabledInHierarchy() && browserHost != null)
            {
                browserHost.SendFocusEvent(true);

                try
                {
                    //_logger.Debug(string.Format("KeyDown: system key {0}, key {1}", arg.SystemKey, arg.Key));
                    CefKeyEvent keyEvent = new CefKeyEvent()
                    {
                        EventType      = CefKeyEventType.Char,
                        WindowsKeyCode = (int)e.KeyChar
                    };

                    keyEvent.Modifiers = GetCurrentKeyboardModifiers();

                    browserHost.SendKeyEvent(keyEvent);
                }
                catch (Exception ex)
                {
                    Log.Error("WebBrowserControl: Caught exception in OnKeyDown(): " + ex.Message);
                }

                //arg.Handled = true;

                return(true);
            }

            return(base.OnKeyPress(e));
        }
예제 #2
0
        private void OnKeyEvent(ref Message m)
        {
            var keyEvent = new CefKeyEvent();

            keyEvent.WindowsKeyCode = m.WParam.ToInt32();
            keyEvent.NativeKeyCode  = (int)m.LParam.ToInt64();
            keyEvent.IsSystemKey    = m.Msg == NativeMethods.WM_SYSCHAR ||
                                      m.Msg == NativeMethods.WM_SYSKEYDOWN ||
                                      m.Msg == NativeMethods.WM_SYSKEYUP;

            if (m.Msg == NativeMethods.WM_KEYDOWN || m.Msg == NativeMethods.WM_SYSKEYDOWN)
            {
                keyEvent.EventType = CefKeyEventType.RawKeyDown;
            }
            else if (m.Msg == NativeMethods.WM_KEYUP || m.Msg == NativeMethods.WM_SYSKEYUP)
            {
                keyEvent.EventType = CefKeyEventType.KeyUp;
            }
            else
            {
                keyEvent.EventType = CefKeyEventType.Char;
            }
            keyEvent.Modifiers = GetKeyboardModifiers(ref m);

            if (this.Renderer != null)
            {
                this.Renderer.SendKeyEvent(keyEvent);
            }
        }
예제 #3
0
파일: Menu.cs 프로젝트: asimonf/RetroLite
        public void HandleEvents()
        {
            var menuController = _inputProcessor[0];

            foreach (var button in _buttons)
            {
                var currentState = menuController.GetButtonState(button);

                if (currentState == GameControllerButtonState.None)
                {
                    continue;
                }

                var eventType = currentState == GameControllerButtonState.Down
                    ? CefKeyEventType.KeyDown
                    : CefKeyEventType.KeyUp;
                var cefKeyEvent = new CefKeyEvent
                {
                    EventType      = eventType,
                    WindowsKeyCode = (short)InputProcessor.GetVirtualKey(button)
                };

                _browser.GetHost().SendKeyEvent(cefKeyEvent);
            }
        }
예제 #4
0
        private void OnGUI()
        {
            Event e = Event.current;

            if (e.isKey)
            {
                var ev = new CefKeyEvent();

                //ev.Character = e.character;
                ev.WindowsKeyCode = (int)e.keyCode;
                ev.NativeKeyCode  = (int)e.keyCode;
                ev.Modifiers      =
                    (e.modifiers.HasFlag(EventModifiers.CapsLock) ? CefEventFlags.CapsLockOn  : 0) |
                    (e.modifiers.HasFlag(EventModifiers.Control)  ? CefEventFlags.ControlDown : 0) |
                    (e.modifiers.HasFlag(EventModifiers.Command)  ? CefEventFlags.CommandDown : 0) |
                    (e.modifiers.HasFlag(EventModifiers.Alt)      ? CefEventFlags.AltDown     : 0) |
                    (e.modifiers.HasFlag(EventModifiers.Shift)    ? CefEventFlags.ShiftDown   : 0);

                if (e.type == EventType.KeyDown)
                {
                    ev.EventType = CefKeyEventType.KeyDown;
                    cefClient.SendKey(ev);
                }
                else if (e.type == EventType.KeyUp)
                {
                    ev.EventType = CefKeyEventType.Char;
                    cefClient.SendKey(ev);
                    ev.EventType = CefKeyEventType.KeyUp;
                    cefClient.SendKey(ev);
                }
            }
        }
 void ICefWebBrowserInternal.OnPreviewKeyEvent(CefKeyEvent keyEvent)
 {
     this.DispatchIfRequired(() =>
     {
         if (keyEvent.EventType == CefKeyEventType.RawKeyDown)
         {
             var keys = (Keys)keyEvent.WindowsKeyCode;
             if ((keyEvent.Modifiers & CefEventFlags.ControlDown) == CefEventFlags.ControlDown)
             {
                 keys |= Keys.Control;
             }
             if ((keyEvent.Modifiers & CefEventFlags.ShiftDown) == CefEventFlags.ShiftDown)
             {
                 keys |= Keys.Shift;
             }
             if ((keyEvent.Modifiers & CefEventFlags.AltDown) == CefEventFlags.AltDown)
             {
                 keys |= Keys.Alt;
             }
             var source = PresentationSource.FromDependencyObject(this);
             var key    = KeyInterop.KeyFromVirtualKey((int)keys);
             var args   = new System.Windows.Input.KeyEventArgs(Keyboard.PrimaryDevice, source, 0, key)
             {
                 RoutedEvent = PreviewKeyDownEvent
             };
             RaiseEvent(args);
         }
     }, true);
 }
        private IInputEventListener NewKeyListener(IInputSource inputSource)
        {
            return(new AnonymousEventListener <KeyEvent>(e =>
            {
                if (e.Device.Source != inputSource)
                {
                    return;
                }

                var key = ToWinFormsKeys(e.Key);
                var cefEvent = new CefKeyEvent()
                {
                    WindowsKeyCode = (int)key,
                    NativeKeyCode = (int)key
                };
                if (e.IsDown)
                {
                    cefEvent.EventType = CefKeyEventType.KeyDown;
                }
                else
                {
                    cefEvent.EventType = CefKeyEventType.KeyUp;
                }

                webRenderer.BrowserHost.SendKeyEvent(cefEvent);
            }));
        }
예제 #7
0
        protected override bool OnKeyUp(KeyEvent e)
        {
            if (IsEnabledInHierarchy() && browserHost != null)
            {
                browserHost.SendFocusEvent(true);

                try
                {
                    //_logger.Debug(string.Format("KeyDown: system key {0}, key {1}", arg.SystemKey, arg.Key));
                    CefKeyEvent keyEvent = new CefKeyEvent()
                    {
                        EventType      = CefKeyEventType.KeyUp,
                        WindowsKeyCode = (int)e.Key /*KeyInterop.VirtualKeyFromKey(arg.Key == Key.System ? arg.SystemKey : arg.Key)*/,
                        NativeKeyCode  = (int)e.Key,                       /*0*/
                        /*IsSystemKey = e.Key == EKeys.System*/
                    };

                    keyEvent.Modifiers = GetCurrentKeyboardModifiers();

                    browserHost.SendKeyEvent(keyEvent);
                }
                catch (Exception ex)
                {
                    Log.Error("WebBrowserControl: Caught exception in OnKeyDown(): " + ex.Message);
                }

                //arg.Handled = true;
            }

            return(base.OnKeyUp(e));
        }
예제 #8
0
 public void SendKey(CefKeyEvent e)
 {
     if (this.sHost == null)
     {
         return;
     }
     this.sHost.SendKeyEvent(e);
 }
예제 #9
0
 protected override bool OnKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr osEvent)
 {
     //var host = browser.GetHost();
     //host.SendKeyEvent(keyEvent);
     //System.Diagnostics.Debug.WriteLine(keyEvent.Character);
     //Console.WriteLine(keyEvent.Character);
     return(base.OnKeyEvent(browser, keyEvent, osEvent));
 }
예제 #10
0
        protected override bool OnKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr osEvent)
        {
            var e = new KeyEventArgs(keyEvent, osEvent);

            _owner.OnKeyEvent(e);

            return(e.Handled);
        }
예제 #11
0
        public void SendKeyEvent(CefKeyEvent keyEvent)
        {
            if (this.Browser != null)
            {
                var host = this.Browser.GetHost();

                host.SendKeyEvent(keyEvent);
            }
        }
예제 #12
0
        protected override bool OnKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr osEvent)
        {
            //对按键的处理
            switch (keyEvent.WindowsKeyCode)
            {
            case 27:
                MainForm.Instance.Invoke(new Action(() =>
                {
                    MainForm.Instance.searchOpen = false;
                    MainForm.Instance.CloseSearch();
                    MainForm.Instance.PanelSearch.Visible = false;
                }
                                                    ));
                break;

            case 68:
                if (keyEvent.IsSystemKey)
                {
                    MainForm.Instance.Invoke(new Action(() =>
                    {
                        MainForm.Instance.textBoxXP1.Focus();
                        MainForm.Instance.textBoxXP1.SelectAll();
                    }
                                                        ));
                }
                break;

            case 123:    //功能键 F12 的KeyCode
                if (keyEvent.EventType.Equals(CefKeyEventType.RawKeyDown))
                {
                    PublicClass.DevTools(_core, browser);
                }
                break;

            case 116:     //F5刷新功能
                if (keyEvent.EventType.Equals(CefKeyEventType.RawKeyDown))
                {
                    PublicClass.ReflashBrowser(browser, _core);
                }

                break;

            case 122:     //F11全屏和非全屏功能
                if (keyEvent.EventType.Equals(CefKeyEventType.KeyUp))
                {
                    //bool fullForm = false;
                    //if (MainForm.Instance.WindowState == System.Windows.Forms.FormWindowState.Maximized
                    //    && MainForm.Instance.ToolsPanel.Visible)
                    //    fullForm = true;
                    PublicClass.ScreenFuction("");    //,fullForm);
                }
                break;
            }
            GC.Collect();
            return(base.OnKeyEvent(browser, keyEvent, osEvent));
        }
예제 #13
0
        internal void Inject(Key keyToInject)
        {
            var keyEvent = new CefKeyEvent()
            {
                EventType      = CefKeyEventType.Char,
                WindowsKeyCode = KeyInterop.VirtualKeyFromKey(keyToInject)
            };

            _browserHost.SendKeyEvent(keyEvent);
        }
예제 #14
0
        protected override bool OnPreKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr os_event, out bool isKeyboardShortcut)
        {
            var e = new PreKeyEventArgs(keyEvent, os_event);

            _owner.OnPreKeyEvent(e);

            isKeyboardShortcut = e.IsKeyboardShortcut;

            return(e.Handled);
        }
예제 #15
0
        /// <summary>
        /// 同时处理keydown和up事件
        /// </summary>
        /// <param name="keyboardEvent"></param>
        private static void HandleKeyboardEvent(SDL_KeyboardEvent keyboardEvent)
        {
            //SimpleInputSnapshot snapshot = _privateSnapshot;
            CefKeyEvent keyEvent = new CefKeyEvent();

            keyEvent.Modifiers      = GetModifiersFromSDL(keyboardEvent.keysym.mod);
            keyEvent.WindowsKeyCode = (int)(GetWindowsKeycodeFromSDLKeycode(keyboardEvent.keysym.scancode));
            keyEvent.NativeKeyCode  = (int)keyboardEvent.keysym.scancode;

            keyEvent.EventType = keyboardEvent.state == 0 ? CefKeyEventType.RawKeyDown:CefKeyEventType.KeyUp;
            _host.SendKeyEvent(keyEvent);
        }
            protected override bool OnPreKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr os_event, out bool isKeyboardShortcut)
            {
                var handler = OwnerWebView.KeyPressed;

                if (handler != null && !browser.IsPopup)
                {
                    handler(keyEvent, out var handled);
                    isKeyboardShortcut = false;
                    return(handled);
                }
                return(base.OnPreKeyEvent(browser, keyEvent, os_event, out isKeyboardShortcut));
            }
예제 #17
0
        /// <summary>
        /// Called before a keyboard event is sent to the renderer. |event| contains
        /// information about the keyboard event. |os_event| is the operating system
        /// event message, if any. Return true if the event was handled or false
        /// otherwise. If the event will be handled in OnKeyEvent() as a keyboard
        /// shortcut set |is_keyboard_shortcut| to true and return false.
        /// </summary>
        /// <param name="browser"></param>
        /// <param name="keyEvent"></param>
        /// <param name="os_event"></param>
        /// <param name="isKeyboardShortcut"></param>
        /// <returns></returns>
        protected override bool OnPreKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr os_event, out bool isKeyboardShortcut)
        {
            if (keyEvent == null)
            {
                throw new ArgumentNullException("keyEvent");
            }

            isKeyboardShortcut = false;

            Application.Current.Window.TriggerKeyPress(keyEvent.WindowsKeyCode, keyEvent.Modifiers, keyEvent.EventType);

            return(false);
        }
예제 #18
0
        protected override bool OnPreKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr os_event, out bool isKeyboardShortcut)
        {
            if (keyEvent.EventType == CefKeyEventType.RawKeyDown)
            {
                webBrowser.OnPreviewKeyDown(keyEvent.Modifiers == CefEventFlags.AltDown,
                                            keyEvent.Modifiers == CefEventFlags.ControlDown,
                                            keyEvent.Modifiers == CefEventFlags.ShiftDown,
                                            keyEvent.FocusOnEditableField,
                                            keyEvent.WindowsKeyCode,
                                            keyEvent.Character);
            }

            return(base.OnPreKeyEvent(browser, keyEvent, os_event, out isKeyboardShortcut));
        }
예제 #19
0
        private void OnKeyEvent(ref Message m)
        {
            CefKeyEvent keyEvent = new CefKeyEvent();

            keyEvent.WindowsKeyCode = m.WParam.ToInt32();
            keyEvent.NativeKeyCode  = (int)m.LParam.ToInt64();
            keyEvent.IsSystemKey    = m.Msg == 262 || m.Msg == 260 || m.Msg == 261;
            keyEvent.EventType      = m.Msg == 256 || m.Msg == 260 ? CefKeyEventType.RawKeyDown : (m.Msg == 257 || m.Msg == 261 ? CefKeyEventType.KeyUp : CefKeyEventType.Char);
            keyEvent.Modifiers      = this.GetKeyboardModifiers(ref m);
            if (this.Renderer == null)
            {
                return;
            }
            this.Renderer.SendKeyEvent(keyEvent);
        }
예제 #20
0
        /// <summary>
        /// Sends the KeyPress event to the browser.
        /// </summary>
        /// <param name="c">The character associated with the key.</param>
        /// <param name="ctrlKey">The Control key flag.</param>
        /// <param name="altKey">The Alt key flag.</param>
        /// <param name="shiftKey">The Shift key flag.</param>
        /// <param name="metaKey">The Meta key flag.</param>
        /// <param name="extendedKey">The extended key flag.</param>
        public void SendKeyPress(char c, bool ctrlKey = false, bool altKey = false, bool shiftKey = false, bool metaKey = false, bool extendedKey = false)
        {
            CefBrowserHost browserHost = this.BrowserObject?.Host;

            if (browserHost is null)
            {
                return;
            }

            CefEventFlags modifiers = CefEventFlags.None;

            if (KeycodeConverter.IsShiftRequired(c))
            {
                shiftKey = !shiftKey;
            }
            if (shiftKey)
            {
                modifiers |= CefEventFlags.ShiftDown;
            }
            if (altKey)
            {
                modifiers |= CefEventFlags.AltDown;
            }
            if (ctrlKey)
            {
                modifiers |= CefEventFlags.ControlDown;
            }
            if (metaKey)
            {
                modifiers |= CefEventFlags.CommandDown;
            }

            VirtualKeys key = KeycodeConverter.CharacterToVirtualKey(c);

            var k = new CefKeyEvent();

            k.Type                = CefKeyEventType.Char;
            k.Modifiers           = (uint)modifiers;
            k.IsSystemKey         = altKey;
            k.WindowsKeyCode      = PlatformInfo.IsLinux ? (int)key : c;
            k.NativeKeyCode       = KeycodeConverter.VirtualKeyToNativeKeyCode(key, modifiers, extendedKey);
            k.Character           = c;
            k.UnmodifiedCharacter = c;
            this.BrowserObject?.Host?.SendKeyEvent(k);
        }
예제 #21
0
        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);
        }
        protected override bool OnKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr osEvent)
        {
            if (keyEvent.WindowsKeyCode == Convert.ToInt32(Keys.F5))
            {
                browser.Reload();
            }

            if (keyEvent.WindowsKeyCode == Convert.ToInt32(Keys.F12))
            {
                CefWindowInfo windowInfo = CefWindowInfo.Create();

                windowInfo.SetAsPopup(IntPtr.Zero, "DevTools");

                browser.GetHost().ShowDevTools(windowInfo, new CefWebDevToolsClient(), new CefBrowserSettings(), new CefPoint(0, 0));
            }

            return(base.OnKeyEvent(browser, keyEvent, osEvent));
        }
예제 #23
0
        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);
        }
예제 #24
0
        protected override bool OnKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr osEvent)
        {
            switch (keyEvent.WindowsKeyCode)
            {
            case (int)Keys.F12:
            {
                var host = browser.GetHost();
                var wi   = CefWindowInfo.Create();
                wi.SetAsPopup(IntPtr.Zero, "医汇通 - 开发调试工具");
                host.ShowDevTools(wi, new DevToolsWebClient(), new CefBrowserSettings());
                //var devToolsUrl = webBrowser.Browser.GetHost().GetDevToolsUrl(true);
                //var isShow = false;
                //foreach (Form field in Application.OpenForms)
                //{
                //    if (field.Text.EndsWith("开发调试工具"))
                //    {
                //        ((DevTools)field).LoadUrl(devToolsUrl);
                //        field.Activate();
                //        isShow = true;
                //    }
                //}
                //if (!isShow)
                //{
                //    var devtool = new DevTools(devToolsUrl);
                //    devtool.Size = new Size(this.Size.Width, devtool.Size.Height);
                //    var point = this.PointToScreen(new Point(0, 0));
                //    devtool.Location = new Point(point.X, point.Y + this.Size.Height - devtool.Size.Height);
                //    devtool.Show();
                //}
                break;
            }

            case (int)Keys.F5:
            {
                browser.ReloadIgnoreCache();
                break;
            }

            default:
                break;
            }
            return(base.OnKeyEvent(browser, keyEvent, osEvent));
        }
예제 #25
0
        public void KeyboardEvent(int character, KeyboardEventType type)
        {
            CefKeyEvent keyEvent = new CefKeyEvent()
            {
                EventType      = CefKeyEventType.Char,
                WindowsKeyCode = character
            };

            if (type == KeyboardEventType.Down)
            {
                keyEvent.EventType = CefKeyEventType.KeyDown;
            }
            if (type == KeyboardEventType.Up)
            {
                keyEvent.EventType = CefKeyEventType.KeyUp;
            }

            _lifespanHandler.MainBrowser.GetHost().SendKeyEvent(keyEvent);
        }
예제 #26
0
        protected override bool OnPreKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr os_event, out bool isKeyboardShortcut)
        {
            if (keyEvent.WindowsKeyCode == 17)
            {
                MainForm.Instance.Invoke(new Action(() =>
                {
                    MainForm.Instance.cefCtrlDown        = true; //Ctrl按下
                    MainForm.Instance.textBox2.ForeColor = Color.Black;
                }
                                                    ));
            }

            if (keyEvent.EventType == CefKeyEventType.KeyUp)
            {
                MainForm.Instance.Invoke(new Action(() =>
                {
                    MainForm.Instance.cefCtrlDown = false; //Ctrl按下
                }
                                                    ));
            }
            return(base.OnPreKeyEvent(browser, keyEvent, os_event, out isKeyboardShortcut));
        }
예제 #27
0
        private void HandleKeyNotification(KeyNotification n, CallerInfo caller)
        {
            var keyEvent = new CefKeyEvent()
            {
                //Modifiers = (CefEventFlags)((int)(FKeyboard.Modifiers) >> 15)
            };

            switch (n.Kind)
            {
            case KeyNotificationKind.KeyDown:
                var keyDown = n as KeyDownNotification;
                keyEvent.EventType      = CefKeyEventType.KeyDown;
                keyEvent.WindowsKeyCode = (int)keyDown.KeyCode;
                keyEvent.NativeKeyCode  = (int)keyDown.KeyCode;
                break;

            case KeyNotificationKind.KeyPress:
                var keyPress = n as KeyPressNotification;
                keyEvent.EventType           = CefKeyEventType.Char;
                keyEvent.Character           = keyPress.KeyChar;
                keyEvent.UnmodifiedCharacter = keyPress.KeyChar;
                keyEvent.WindowsKeyCode      = (int)keyPress.KeyChar;
                keyEvent.NativeKeyCode       = (int)keyPress.KeyChar;
                break;

            case KeyNotificationKind.KeyUp:
                var keyUp = n as KeyUpNotification;
                keyEvent.EventType      = CefKeyEventType.KeyUp;
                keyEvent.WindowsKeyCode = (int)keyUp.KeyCode;
                keyEvent.NativeKeyCode  = (int)keyUp.KeyCode;
                break;

            default:
                break;
            }
            webRenderer.BrowserHost.SendKeyEvent(keyEvent);
        }
예제 #28
0
 internal static void SendKeyEvent(this WebView webview, CefKeyEvent keyEvent)
 {
     webview.GetCefBrowser()?.GetHost()?.SendKeyEvent(keyEvent);
 }
예제 #29
0
        private void AttachEventHandlers(WpfCefBrowser browser)
        {
            browser.GotKeyboardFocus += (sender, arg) =>
            {
                try
                {
                    if (_browserHost != null)
                    {
                        _browserHost.SendFocusEvent(true);
                    }
                }
                catch (Exception ex)
                {
                    _logger.ErrorException("WpfCefBrowser: Caught exception in GotFocus()", ex);
                }
            };

            browser.LostKeyboardFocus += (sender, arg) =>
            {
                try
                {
                    if (_browserHost != null)
                    {
                        _browserHost.SendFocusEvent(false);
                    }
                }
                catch (Exception ex)
                {
                    _logger.ErrorException("WpfCefBrowser: Caught exception in LostFocus()", ex);
                }
            };

            browser.MouseLeave += (sender, arg) =>
            {
                try
                {
                    if (_browserHost != null)
                    {
                        CefMouseEvent mouseEvent = new CefMouseEvent()
                        {
                            X = 0,
                            Y = 0
                        };

                        mouseEvent.Modifiers = GetMouseModifiers();

                        _browserHost.SendMouseMoveEvent(mouseEvent, true);
                    }
                }
                catch (Exception ex)
                {
                    _logger.ErrorException("WpfCefBrowser: Caught exception in MouseLeave()", ex);
                }
            };

            browser.MouseMove += (sender, arg) =>
            {
                try
                {
                    if (_browserHost != null)
                    {
                        Point cursorPos = arg.GetPosition(this);

                        CefMouseEvent mouseEvent = new CefMouseEvent()
                        {
                            X = (int)cursorPos.X,
                            Y = (int)cursorPos.Y
                        };

                        mouseEvent.Modifiers = GetMouseModifiers();

                        _browserHost.SendMouseMoveEvent(mouseEvent, false);
                    }
                }
                catch (Exception ex)
                {
                    _logger.ErrorException("WpfCefBrowser: Caught exception in MouseMove()", ex);
                }
            };

            browser.MouseDown += (sender, arg) =>
            {
                try
                {
                    if (_browserHost != null)
                    {
                        Focus();

                        Point cursorPos = arg.GetPosition(this);

                        CefMouseEvent mouseEvent = new CefMouseEvent()
                        {
                            X = (int)cursorPos.X,
                            Y = (int)cursorPos.Y,
                        };

                        mouseEvent.Modifiers = GetMouseModifiers();

                        if (arg.ChangedButton == MouseButton.Left)
                        {
                            _browserHost.SendMouseClickEvent(mouseEvent, CefMouseButtonType.Left, false, arg.ClickCount);
                        }
                        else if (arg.ChangedButton == MouseButton.Middle)
                        {
                            _browserHost.SendMouseClickEvent(mouseEvent, CefMouseButtonType.Middle, false, arg.ClickCount);
                        }
                        else if (arg.ChangedButton == MouseButton.Right)
                        {
                            _browserHost.SendMouseClickEvent(mouseEvent, CefMouseButtonType.Right, false, arg.ClickCount);
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.ErrorException("WpfCefBrowser: Caught exception in MouseDown()", ex);
                }
            };

            browser.MouseUp += (sender, arg) =>
            {
                try
                {
                    if (_browserHost != null)
                    {
                        Point cursorPos = arg.GetPosition(this);

                        CefMouseEvent mouseEvent = new CefMouseEvent()
                        {
                            X = (int)cursorPos.X,
                            Y = (int)cursorPos.Y,
                        };

                        mouseEvent.Modifiers = GetMouseModifiers();

                        if (arg.ChangedButton == MouseButton.Left)
                        {
                            _browserHost.SendMouseClickEvent(mouseEvent, CefMouseButtonType.Left, true, 1);
                        }
                        else if (arg.ChangedButton == MouseButton.Middle)
                        {
                            _browserHost.SendMouseClickEvent(mouseEvent, CefMouseButtonType.Middle, true, 1);
                        }
                        else if (arg.ChangedButton == MouseButton.Right)
                        {
                            _browserHost.SendMouseClickEvent(mouseEvent, CefMouseButtonType.Right, true, 1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.ErrorException("WpfCefBrowser: Caught exception in MouseUp()", ex);
                }
            };


            browser.MouseWheel += (sender, arg) =>
            {
                try
                {
                    if (_browserHost != null)
                    {
                        Point cursorPos = arg.GetPosition(this);

                        CefMouseEvent mouseEvent = new CefMouseEvent()
                        {
                            X = (int)cursorPos.X,
                            Y = (int)cursorPos.Y,
                        };

                        _browserHost.SendMouseWheelEvent(mouseEvent, 0, arg.Delta);
                    }
                }
                catch (Exception ex)
                {
                    _logger.ErrorException("WpfCefBrowser: Caught exception in MouseWheel()", ex);
                }
            };

            // TODO: require more intelligent processing
            browser.PreviewTextInput += (sender, arg) =>
            {
                if (_browserHost != null)
                {
                    _logger.Debug("TextInput: text {0}", arg.Text);

                    foreach (var c in arg.Text)
                    {
                        CefKeyEvent keyEvent = new CefKeyEvent()
                        {
                            EventType      = CefKeyEventType.Char,
                            WindowsKeyCode = (int)c,
                        };

                        keyEvent.Modifiers = GetKeyboardModifiers();

                        _browserHost.SendKeyEvent(keyEvent);
                    }
                }

                arg.Handled = true;
            };

            // TODO: require more intelligent processing
            browser.PreviewKeyDown += (sender, arg) =>
            {
                try
                {
                    if (_browserHost != null)
                    {
                        CefKeyEvent keyEvent = new CefKeyEvent()
                        {
                            EventType      = CefKeyEventType.RawKeyDown,
                            WindowsKeyCode = KeyInterop.VirtualKeyFromKey(arg.Key == Key.System ? arg.SystemKey : arg.Key),
                            NativeKeyCode  = 0,
                            IsSystemKey    = arg.Key == Key.System,
                        };

                        keyEvent.Modifiers = GetKeyboardModifiers();

                        _browserHost.SendKeyEvent(keyEvent);
                    }
                }
                catch (Exception ex)
                {
                    _logger.ErrorException("WpfCefBrowser: Caught exception in PreviewKeyDown()", ex);
                }

                arg.Handled = HandledKeys.Contains(arg.Key);
            };

            // TODO: require more intelligent processing
            browser.PreviewKeyUp += (sender, arg) =>
            {
                try
                {
                    if (_browserHost != null)
                    {
                        //_logger.Debug(string.Format("KeyUp: system key {0}, key {1}", arg.SystemKey, arg.Key));
                        CefKeyEvent keyEvent = new CefKeyEvent()
                        {
                            EventType      = CefKeyEventType.KeyUp,
                            WindowsKeyCode = KeyInterop.VirtualKeyFromKey(arg.Key == Key.System ? arg.SystemKey : arg.Key),
                            NativeKeyCode  = 0,
                            IsSystemKey    = arg.Key == Key.System,
                        };

                        keyEvent.Modifiers = GetKeyboardModifiers();

                        _browserHost.SendKeyEvent(keyEvent);
                    }
                }
                catch (Exception ex)
                {
                    _logger.ErrorException("WpfCefBrowser: Caught exception in PreviewKeyUp()", ex);
                }

                arg.Handled = true;
            };
        }
예제 #30
0
 protected override bool OnPreKeyEvent(CefBrowser browser, CefKeyEvent keyEvent, IntPtr os_event, out bool isKeyboardShortcut)
 {
     return(base.OnPreKeyEvent(browser, keyEvent, os_event, out isKeyboardShortcut));
 }