コード例 #1
0
        public OpenGLRenderer()
        {
            var windowCloseDelegate = new Action(() =>
            {
                NativeDumpDebugInfo();
                //Environment.Exit(0);
            });

            var mouseDelegate  = new MouseMoveEventHandler(ProcessMouseMoveEvent);
            var keyboardEvent  = new KeyboardEventHandler(ProcessKeyPressedEvent);
            var mouseDownEvent = new MouseButtonEventHandler(ProcessMouseDownEvent);
            var mouseUpEvent   = new MouseButtonEventHandler(ProcessMouseUpEvent);

            _unmanaged_references.Add(GCHandle.Alloc(windowCloseDelegate));
            _unmanaged_references.Add(GCHandle.Alloc(mouseDelegate));
            _unmanaged_references.Add(GCHandle.Alloc(mouseDownEvent));
            _unmanaged_references.Add(GCHandle.Alloc(mouseUpEvent));
            _unmanaged_references.Add(GCHandle.Alloc(keyboardEvent));

            NativeRegisterWindowCloseCallback(windowCloseDelegate);
            NativeRegisterKeyboardCallback(keyboardEvent);
            NativeRegisterMouseDownCallback(mouseDownEvent);
            NativeRegisterMouseMoveCallback(mouseDelegate);
            NativeRegisterMouseUpCallback(mouseUpEvent);
        }
コード例 #2
0
ファイル: KeyboardHook.cs プロジェクト: macote/Winook
 private void RemoveHandlerInternal(uint key, KeyboardEventHandler handler)
 {
     if (_messageHandlers.ContainsKey(key))
     {
         _messageHandlers[key] -= handler;
     }
 }
コード例 #3
0
        public static void Subscribe(KeyModifiers modifiers, Keys key, KeyboardEventHandler handler)
        {
            if ((modifiers & KeyModifiers.Control) == KeyModifiers.LControl ||
                (modifiers & KeyModifiers.Control) == KeyModifiers.RControl ||
                (modifiers & KeyModifiers.Alt) == KeyModifiers.LAlt ||
                (modifiers & KeyModifiers.Alt) == KeyModifiers.RAlt ||
                (modifiers & KeyModifiers.Shift) == KeyModifiers.LShift ||
                (modifiers & KeyModifiers.Shift) == KeyModifiers.RShift ||
                (modifiers & KeyModifiers.Win) == KeyModifiers.LWin ||
                (modifiers & KeyModifiers.Win) == KeyModifiers.RWin)
            {
                if (hook == IntPtr.Zero)
                {
                    subscriptions = new Dictionary <Subscription, KeyboardEventHandler>(
                        new Subscription.SubscriptionEqualityComparer());

                    hook = NativeMethods.SetWindowsHookEx(NativeMethods.WH_KEYBOARD_LL,
                                                          keyboardHookProcedure,
                                                          System.Diagnostics.Process.GetCurrentProcess().MainModule.BaseAddress, 0);
                }

                var newSubscription = new Subscription(modifiers, key);
                KeyboardEventHandler handlers;
                if (subscriptions.TryGetValue(newSubscription, out handlers))
                {
                    subscriptions[newSubscription] = handlers + handler;
                }
                else
                {
                    subscriptions[newSubscription] = handler;
                }
            }
            else
            {
                NativeMethods.MOD mods = 0;
                if (modifiers.HasFlag(KeyModifiers.Control))
                {
                    mods |= NativeMethods.MOD.MOD_CONTROL;
                }
                if (modifiers.HasFlag(KeyModifiers.Alt))
                {
                    mods |= NativeMethods.MOD.MOD_ALT;
                }
                if (modifiers.HasFlag(KeyModifiers.Shift))
                {
                    mods |= NativeMethods.MOD.MOD_SHIFT;
                }
                if (modifiers.HasFlag(KeyModifiers.Win))
                {
                    mods |= NativeMethods.MOD.MOD_WIN;
                }
                NativeMethods.RegisterHotKey(Windawesome.HandleStatic, registeredHotkeys.Count, mods, key);
                registeredHotkeys.Add(handler);
            }

            hasKeyOnlySubscriptions |= modifiers == KeyModifiers.None;
        }
コード例 #4
0
ファイル: KeyboardHook.cs プロジェクト: macote/Winook
        private void AddHandlerInternal(uint key, KeyboardEventHandler handler)
        {
            if (!_messageHandlers.ContainsKey(key))
            {
                _messageHandlers.Add(key, null);
            }

            _messageHandlers[key] += handler;
        }
コード例 #5
0
        private void HandleKeyboardMessage(KeyboardMessageEventArgs message, KeyboardEventHandler handler)
        {
            if (this._disabled)
            {
                return;
            }

            handler?.Invoke(this, message);
        }
コード例 #6
0
 // 主线程循环
 internal static void MainThreadUpdate()
 {
     FocusEventHandler.MainThreadUpdate();
     ScreenResizeEventHandler.MainThreadUpdate();
     CollisionEventHandler.MainThreadUpdate();
     TriggerEventHandler.MainThreadUpdate();
     PointerEventHandlerForScreen.MainThreadUpdate();
     PointerEventHandlerForUI.MainThreadUpdate();
     PointerEventHandlerForMesh.MainThreadUpdate();
     KeyboardEventHandler.MainThreadUpdate();
     FrameLoopEventHandler.MainThreadUpdate();
     IntervalEventHandler.MainThreadUpdate();
     CustomEventHandler.MainThreadUpdate();
     TraceEventHandler.MainThreadUpdate();
 }
コード例 #7
0
        /// <summary>
        /// Installs the specified hook.
        /// </summary>
        /// <param name="hook">The hook.</param>
        /// <param name="handler">The handler.</param>
        /// <param name="hold">if set to <c>true</c> [hold].</param>
        public void Install(KeyboardHook hook, KeyboardEventHandler handler, bool hold = false)
        {
            if (!this.IsDefined() || handler == null)
            {
                return;
            }

            hook.AddHandler(this.KeyCode, KeyDirection.Up, this.Modifier, handler);

            if (hold)
            {
                hook.AddHandler(this.KeyCode, KeyDirection.Down, this.Modifier, handler);
            }

            this._hook               = hook;
            this._handler            = handler;
            this._registeredKeycode  = this.KeyCode;
            this._registeredModifier = this.Modifier;
            this._isHoldHotkey       = true;
        }
コード例 #8
0
        /// <summary>
        /// Uninstalls the specified hook.
        /// </summary>
        public void Uninstall()
        {
            if (!this.IsHooked() || this._handler == null || this._hook == null)
            {
                return;
            }

            this._hook.RemoveHandler(this._registeredKeycode, this._registeredModifier, KeyDirection.Up, this._handler);

            if (this._isHoldHotkey)
            {
                this._hook.RemoveHandler(this._registeredKeycode, this._registeredModifier, KeyDirection.Down, this._handler);
            }

            this._hook               = null;
            this._handler            = null;
            this._isHoldHotkey       = false;
            this._registeredKeycode  = KeyCode.None;
            this._registeredModifier = Modifiers.None;
        }
コード例 #9
0
ファイル: KeyboardHook.cs プロジェクト: macote/Winook
 public void RemoveHandler(KeyCode keyCode, KeyboardEventHandler handler)
 => RemoveHandler((ushort)keyCode, Modifiers.None, KeyDirection.Any, handler);
コード例 #10
0
ファイル: KeyboardHook.cs プロジェクト: macote/Winook
 public void AddHandler(ushort keyValue, Modifiers modifiers, KeyboardEventHandler handler)
 => AddHandler(keyValue, modifiers, KeyDirection.Up, handler);
コード例 #11
0
ファイル: KeyboardHook.cs プロジェクト: macote/Winook
 public void AddHandler(KeyCode keyCode, Modifiers modifiers, KeyboardEventHandler handler)
 => AddHandler((ushort)keyCode, modifiers, KeyDirection.Up, handler);
コード例 #12
0
 /// <summary> 移除键盘按键事件侦听 </summary>
 /// <param name="keyCode">侦听的按键键值</param>
 /// <param name="listener">键盘按键事件侦听函数 ( Params - 侦听按键键值,按键事件类型 ) </param>
 public void RemoveKeyboardListener(KeyCode keyCode, Action <KeyCode, KeyboardEventType> listener)
 => KeyboardEventHandler.RemoveListener(keyCode, listener);
コード例 #13
0
    public void handleKeypress()
    {
        KeyboardEventHandler handler = KeyboardEvent;

        // UP BUTTON
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            activeKeys["UP"] = true;
            handler("up", "keyDown");
        }
        else
        {
            if (Input.GetKeyUp(KeyCode.UpArrow))
            {
                activeKeys["UP"] = false;
                handler("up", "keyUp");
            }
        }
        // RIGHT BUTTON
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            activeKeys["RIGHT"] = true;
            handler("right", "keyDown");
        }
        else
        {
            if (Input.GetKeyUp(KeyCode.RightArrow))
            {
                activeKeys["RIGHT"] = false;
                handler("right", "keyUp");
            }
        }
        // DOWN BUTTON
        if (Input.GetKeyDown(KeyCode.DownArrow))
        {
            activeKeys["DOWN"] = true;
            handler("down", "keyDown");
        }
        else
        {
            if (Input.GetKeyUp(KeyCode.DownArrow))
            {
                activeKeys["DOWN"] = false;
                handler("down", "keyUp");
            }
        }
        // LEFT BUTTON
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            // do something with the left direction
            activeKeys["LEFT"] = true;
            handler("left", "keyDown");
        }
        else
        {
            if (Input.GetKeyUp(KeyCode.LeftArrow))
            {
                activeKeys["LEFT"] = false;
                handler("left", "keyUp");
            }
        }
        // SPACE BUTTON
        if (Input.GetKeyDown(KeyCode.Space))
        {
            activeKeys["SPACE"] = true;
            handler("space", "keyDown");
        }
        else
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                activeKeys["SPACE"] = false;
                handler("space", "keyUp");
            }
        }
    }
コード例 #14
0
ファイル: Page.xaml.cs プロジェクト: aragorn55/codeclimber
        private void BindEvents()
        {
            Image fsImg = FindName("fullScreen") as Image;
            fsImg.MouseLeftButtonUp += new MouseEventHandler(OnFullScreenClicked);
            BrowserHost.FullScreenChange += new EventHandler(BrowserHost_FullScreenChange);
            BrowserHost.Resize += BrowserHost_FullScreenChange;

            Image zoomInImg = FindName("zoomin") as Image;
            zoomInImg.MouseLeftButtonUp += new MouseEventHandler(zoomInImg_MouseLeftButtonUp);
            Image zoomOutImg = FindName("zoomout") as Image;
            zoomOutImg.MouseLeftButtonUp += new MouseEventHandler(zoomOutImg_MouseLeftButtonUp);

            Image firstImg = FindName("first") as Image;
            firstImg.MouseLeftButtonUp += new MouseEventHandler(firstImg_MouseLeftButtonUp);
            Image prevImg = FindName("prev") as Image;
            prevImg.MouseLeftButtonUp += new MouseEventHandler(prevImg_MouseLeftButtonUp);
            Image nextImg = FindName("next") as Image;
            nextImg.MouseLeftButtonUp += new MouseEventHandler(nextImg_MouseLeftButtonUp);
            Image lastImg = FindName("last") as Image;
            lastImg.MouseLeftButtonUp += new MouseEventHandler(lastImg_MouseLeftButtonUp);

            KeyUp += new KeyboardEventHandler(Page_KeyUp);
        }
コード例 #15
0
 /// <summary> 添加键盘按键事件侦听 </summary>
 /// <param name="keyCode">侦听的按键键值</param>
 /// <param name="listener">键盘按键事件侦听函数 ( Params - 侦听按键键值,按键事件类型 ) </param>
 /// <param name="priority">设置侦听函数执行优先级,数值越高优先级越高。同数值情况下,先添加的侦听函数优先级更高,默认为 0 </param>
 public void AddKeyboardListener(KeyCode keyCode, Action <KeyCode, KeyboardEventType> listener, int priority = 0)
 => KeyboardEventHandler.AddListener(keyCode, listener, priority);
コード例 #16
0
ファイル: KeyboardHook.cs プロジェクト: macote/Winook
 public void RemoveHandler(ushort keyValue, Modifiers modifiers, KeyboardEventHandler handler)
 => RemoveHandler(keyValue, modifiers, KeyDirection.Any, handler);
コード例 #17
0
ファイル: KeyboardHook.cs プロジェクト: macote/Winook
 public void RemoveHandler(ushort keyValue, Modifiers modifiers, KeyDirection direction, KeyboardEventHandler handler)
 {
     foreach (var key in GetHandlerKeys(keyValue, modifiers, direction))
     {
         RemoveHandlerInternal(key, handler ?? throw new ArgumentNullException(nameof(handler)));
     }
 }
コード例 #18
0
 private static extern void NativeRegisterKeyboardCallback(KeyboardEventHandler pHandler);
コード例 #19
0
ファイル: InputMgr.cs プロジェクト: endy/IvyXNA
        public void RegisterKey(Keys key, KeyboardEventHandler eventHandler)
        {
            int keyIdx = -1;
            for (int idx = 0; idx < m_registeredKeys.Count; ++idx)
            {
                if (m_registeredKeys[idx].Key == key)
                {
                    keyIdx = idx;
                    break;
                }
            }

            if (keyIdx != -1)
            {
                m_registeredKeys[keyIdx].AddHandler(eventHandler);
            }
            else
            {
                RegisteredKey rk = new RegisteredKey(key);
                rk.AddHandler(eventHandler);

                m_registeredKeys.Add(rk);
            }
        }
コード例 #20
0
ファイル: InputMgr.cs プロジェクト: endy/IvyXNA
 public void RemoveHandler(KeyboardEventHandler handler)
 {
     OnKeyboardEvent -= handler;
 }
コード例 #21
0
ファイル: InputMgr.cs プロジェクト: endy/IvyXNA
 public void AddHandler(KeyboardEventHandler handler)
 {
     OnKeyboardEvent += handler;
 }
コード例 #22
0
ファイル: InputMgr.cs プロジェクト: endy/IvyXNA
        public void UnregisterKey(Keys key, KeyboardEventHandler eventHandler)
        {
            for (int idx = 0; idx < m_registeredKeys.Count; ++idx)
            {
                if (m_registeredKeys[idx].Key == key)
                {
                    m_registeredKeys[idx].RemoveHandler(eventHandler);

                    if (m_registeredKeys[idx].Empty)
                    {
                        m_registeredKeys.RemoveAt(idx);
                    }

                    break;
                }
            }
        }
コード例 #23
0
ファイル: KeyboardHook.cs プロジェクト: macote/Winook
 public void RemoveHandler(KeyCode keyCode, Modifiers modifiers, KeyDirection direction, KeyboardEventHandler handler)
 => RemoveHandler((ushort)keyCode, modifiers, direction, handler);
コード例 #24
0
ファイル: KeyboardHook.cs プロジェクト: yongzhi444/Winook
 public void RemoveHandler(ushort keyValue, KeyboardEventHandler handler)
 => RemoveHandler(keyValue, Modifiers.None, KeyDirection.Up, handler);
コード例 #25
0
 public Keyboard(KeyboardEventHandler onkeydown)
 {
     this.onKeyDown = onkeydown;
 }
コード例 #26
0
ファイル: KeyboardEventArgs.cs プロジェクト: z2516305651/wpf
        /// <summary>
        ///     The mechanism used to call the type-specific handler on the
        ///     target.
        /// </summary>
        /// <param name="genericHandler">
        ///     The generic handler to call in a type-specific way.
        /// </param>
        /// <param name="genericTarget">
        ///     The target to call the handler on.
        /// </param>
        /// <ExternalAPI/>
        protected override void InvokeEventHandler(Delegate genericHandler, object genericTarget)
        {
            KeyboardEventHandler handler = (KeyboardEventHandler)genericHandler;

            handler(genericTarget, this);
        }
コード例 #27
0
 public static extern IntPtr SetWindowsHookEx(int id, KeyboardEventHandler eventHandler, IntPtr moduleName, IntPtr threadId);
コード例 #28
0
        public KeyboardMouseHook(KeyboardEventHandler eventKeyDown)
        {
            //Create an event using a delegate to fire whenever data is received by the hook
            myEventKeyOrMouse = eventKeyDown;
            _Keyboardproc = KeyboardHookCallback;
            _KeyboardhookID = SetKeyboardHook(_Keyboardproc);

            _Mouseproc = MouseHookCallback;
            _MousehookID = SetMouseHook(_Mouseproc);

            Modifiers = KeyModifiers.None;
        }