Exemplo n.º 1
0
        public bool PreFilterMessage(ref global::System.Windows.Forms.Message m)
        {
            if (m.Msg == WM_KEYDOWN)
            {
                TranslateMessage(ref m);
            }

            if (Handler != null)
            {
                return(Handler(m));
            }
            return(true);
        }
Exemplo n.º 2
0
 public bool PreFilterMessage(ref global::System.Windows.Forms.Message m)
 {
     if (m.Msg == 0x312)
     {
         if (OnHotkey != null)
         {
             foreach (UInt32 key in keyIDs.Values)
             {
                 if ((UInt32)m.WParam == key)
                 {
                     OnHotkey((int)m.WParam);
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
Exemplo n.º 3
0
 static extern bool TranslateMessage(ref global::System.Windows.Forms.Message lpMsg);
Exemplo n.º 4
0
        private bool HandleEvent(global::System.Windows.Forms.Message Msg)
        {
            if (!GameStates.GameState.Game.IsActive)
            {
                _disableInput = true;
                return(false);
            }

            if (_disableInput)
            {
                _disableInput = false;
                return(false);
            }
            QueueLock.WaitOne();
            bool handled = false;

            switch ((WindowMessage)Msg.Msg)
            {
            case WindowMessage.WM_CHAR:
            {
                var args = new global::System.Windows.Forms.KeyPressEventArgs((char)Msg.WParam);
                Queued.Add(new QueuedInput
                    {
                        Message = Gui.InputEvents.KeyPress,
                        Args    = new Gui.InputEventArgs
                        {
                            KeyValue = args.KeyChar,
                            Alt      = false,
                            Control  = false,
                            Shift    = false,
                        }
                    });
                handled = true;
                break;
            }

            case WindowMessage.WM_KEYDOWN:
            {
                var args = new global::System.Windows.Forms.KeyEventArgs((global::System.Windows.Forms.Keys)Msg.WParam);

                if (args.KeyData == global::System.Windows.Forms.Keys.Alt)
                {
                    AltDown = true;
                }
                if (args.KeyData == global::System.Windows.Forms.Keys.ControlKey)
                {
                    CtrlDown = true;
                }
                if (args.KeyData == global::System.Windows.Forms.Keys.ShiftKey)
                {
                    ShiftDown = true;
                }

                var realCode = TranslateKey(Msg.LParam, args.KeyCode);

                if (realCode == global::System.Windows.Forms.Keys.Oemtilde)
                {
                    ConsoleTogglePressed = true;
                }
                else
                {
                    Queued.Add(new QueuedInput
                        {
                            Message = Gui.InputEvents.KeyDown,
                            Args    = new Gui.InputEventArgs
                            {
                                Alt      = args.Alt,
                                Control  = args.Control,
                                Shift    = args.Shift,
                                KeyValue = (int)realCode,
                            }
                        });
                }

                handled = true;
                break;
            }

            case WindowMessage.WM_KEYUP:
            {
                var args = new global::System.Windows.Forms.KeyEventArgs((global::System.Windows.Forms.Keys)Msg.WParam);

                if (args.KeyData == global::System.Windows.Forms.Keys.Alt)
                {
                    AltDown = false;
                }
                if (args.KeyData == global::System.Windows.Forms.Keys.ControlKey)
                {
                    CtrlDown = false;
                }
                if (args.KeyData == global::System.Windows.Forms.Keys.ShiftKey)
                {
                    ShiftDown = false;
                }

                var realCode = TranslateKey(Msg.LParam, args.KeyCode);

                Queued.Add(new QueuedInput
                    {
                        Message = Gui.InputEvents.KeyUp,
                        Args    = new Gui.InputEventArgs
                        {
                            Alt      = AltDown,     // For some reason WM_KEYUP doesn't actually detect if the modifier keys are pressed or not. So what's the point??
                            Control  = CtrlDown,
                            Shift    = ShiftDown,
                            KeyValue = (int)args.KeyCode
                        }
                    });
                handled = true;
                break;
            }

            case WindowMessage.WM_LBUTTONDOWN:
            case WindowMessage.WM_RBUTTONDOWN:
            {
                Queued.Add(new QueuedInput
                    {
                        Message = Gui.InputEvents.MouseDown,
                        Args    = new Gui.InputEventArgs
                        {
                            Alt         = AltDown,
                            Control     = CtrlDown,
                            Shift       = ShiftDown,
                            MouseButton = (WindowMessage)Msg.Msg == WindowMessage.WM_LBUTTONDOWN ? 0 : 1,
                            X           = (int)((int)Msg.LParam & 0x0000FFFFu),
                            Y           = (int)((int)Msg.LParam & 0xFFFF0000u) >> 16
                        }
                    });
                handled = false;
                break;
            }

            case WindowMessage.WM_LBUTTONUP:
            case WindowMessage.WM_RBUTTONUP:
            {
                Queued.Add(new QueuedInput
                    {
                        Message = Gui.InputEvents.MouseUp,
                        Args    = new Gui.InputEventArgs
                        {
                            Alt         = AltDown,
                            Control     = CtrlDown,
                            Shift       = ShiftDown,
                            MouseButton = (WindowMessage)Msg.Msg == WindowMessage.WM_LBUTTONUP ? 0 : 1,
                            X           = (int)((int)Msg.LParam & 0x0000FFFFu),
                            Y           = (int)((int)Msg.LParam & 0xFFFF0000u) >> 16
                        }
                    });
                Queued.Add(new QueuedInput
                    {
                        Message = Gui.InputEvents.MouseClick,
                        Args    = new Gui.InputEventArgs
                        {
                            Alt         = AltDown,
                            Control     = CtrlDown,
                            Shift       = ShiftDown,
                            MouseButton = (WindowMessage)Msg.Msg == WindowMessage.WM_LBUTTONUP ? 0 : 1,
                            X           = (int)((int)Msg.LParam & 0x0000FFFFu),
                            Y           = (int)((int)Msg.LParam & 0xFFFF0000u) >> 16
                        }
                    });
                handled = false;
                break;
            }

            case WindowMessage.WM_MOUSEMOVE:
            {
                Queued.Add(new QueuedInput
                    {
                        Message = Gui.InputEvents.MouseMove,
                        Args    = new Gui.InputEventArgs
                        {
                            Alt     = AltDown,
                            Control = CtrlDown,
                            Shift   = ShiftDown,
                            X       = (int)((int)Msg.LParam & 0x0000FFFFu),
                            Y       = (int)((int)Msg.LParam & 0xFFFF0000u) >> 16
                        }
                    });
                handled = false;
                break;
            }

            case WindowMessage.WM_MOUSEWHEEL:
            {
                Queued.Add(new QueuedInput
                    {
                        Message = Gui.InputEvents.MouseWheel,
                        Args    = new Gui.InputEventArgs
                        {
                            Alt         = AltDown,
                            Control     = CtrlDown,
                            Shift       = ShiftDown,
                            ScrollValue = (short)((Msg.WParam.ToInt32() & 0xFFFF0000u) >> 16)
                        }
                    });
                handled = false;
                break;
            }

            default:
                handled = false;
                break;
            }

            QueueLock.ReleaseMutex();
            return(handled);
        }