コード例 #1
0
        private void CreateInputEvent(NativeMethods.INPUT_RECORD record, out InputEvent inputEvent)
        {
            inputEvent = new InputEvent();

            switch (record.EventType)
            {
            case NativeMethods.MOUSE_EVENT:
                inputEvent.InputType  = InputEventType.Mouse;
                inputEvent.MouseInput = new MouseInputEvent(
                    record.MouseEvent.dwMousePosition.X,
                    record.MouseEvent.dwMousePosition.Y,
                    record.MouseEvent.dwButtonState,
                    record.MouseEvent.dwControlKeyState,
                    record.MouseEvent.dwEventFlags
                    );
                break;

            case NativeMethods.KEY_EVENT:
                inputEvent.InputType     = InputEventType.Keyboard;
                inputEvent.KeyboardInput = new KeyboardInputEvent(
                    record.KeyEvent.wVirtualKeyCode,
                    record.KeyEvent.UnicodeChar,
                    record.KeyEvent.dwControlKeyState,
                    record.KeyEvent.wRepeatCount,
                    record.KeyEvent.bKeyDown
                    );
                break;
            }
        }
コード例 #2
0
        public InputEvent GetInput()
        {
            var        record    = new NativeMethods.INPUT_RECORD();
            uint       recordLen = 0;
            InputEvent inputEvent;

            if (!(NativeMethods.ReadConsoleInput(_handler, ref record, 1, ref recordLen)))
            {
                throw new Win32Exception();
            }

            CreateInputEvent(record, out inputEvent);
            return(inputEvent);
        }
コード例 #3
0
ファイル: RecordMouse.cs プロジェクト: GmxMahdi/CMD-Chess
        public static void Run()
        {
            // Merci StackOverflow.
            runProcess = true;
            var handle = NativeMethods.GetStdHandle(NativeMethods.STD_INPUT_HANDLE);

            int mode = 0;

            if (!(NativeMethods.GetConsoleMode(handle, ref mode)))
            {
                throw new Win32Exception();
            }

            mode |= NativeMethods.ENABLE_MOUSE_INPUT;
            mode &= ~NativeMethods.ENABLE_QUICK_EDIT_MODE;
            mode |= NativeMethods.ENABLE_EXTENDED_FLAGS;

            if (!(NativeMethods.SetConsoleMode(handle, mode)))
            {
                throw new Win32Exception();
            }

            var  record    = new NativeMethods.INPUT_RECORD();
            uint recordLen = 0;

            while (runProcess)
            {
                while (isNotDrawing)
                {
                    if (!(NativeMethods.ReadConsoleInput(handle, ref record, 1, ref recordLen)))
                    {
                        throw new Win32Exception();
                    }
                    switch (record.EventType)
                    {
                    case NativeMethods.MOUSE_EVENT:
                    {
                        isMouseHeld = record.MouseEvent.dwButtonState;
                        col         = record.MouseEvent.dwMousePosition.X;
                        row         = record.MouseEvent.dwMousePosition.Y;
                    }
                    break;
                    }
                }
            }
        }
コード例 #4
0
        public InputEvent MaybeGetInput()
        {
            UInt32 events = 0;

            NativeMethods.GetNumberOfConsoleInputEvents(_handler, out events);
            InputEvent inputEvent = new InputEvent();

            if (events > 0)
            {
                var  record    = new NativeMethods.INPUT_RECORD();
                uint recordLen = 0;
                if (!(NativeMethods.ReadConsoleInput(_handler, ref record, 1, ref recordLen)))
                {
                    throw new Win32Exception();
                }

                CreateInputEvent(record, out inputEvent);
            }
            return(inputEvent);
        }
コード例 #5
0
        static public void MouseThread()
        {
            var handle = NativeMethods.GetStdHandle(NativeMethods.STD_INPUT_HANDLE);

            int mode = 0;

            if (!(NativeMethods.GetConsoleMode(handle, ref mode)))
            {
                throw new Win32Exception();
            }

            mode |= NativeMethods.ENABLE_MOUSE_INPUT;
            mode &= ~NativeMethods.ENABLE_QUICK_EDIT_MODE;
            mode |= NativeMethods.ENABLE_EXTENDED_FLAGS;

            if (!(NativeMethods.SetConsoleMode(handle, mode)))
            {
                throw new Win32Exception();
            }

            var  record    = new NativeMethods.INPUT_RECORD();
            uint recordLen = 0;

            while (true)
            {
                if (!(NativeMethods.ReadConsoleInput(handle, ref record, 1, ref recordLen)))
                {
                    throw new Win32Exception();
                }
                switch (record.EventType)
                {
                case NativeMethods.MOUSE_EVENT:
                {
                    Mouse._Pressed = Mouse.Pressed;
                    if (record.MouseEvent.dwButtonState == 0x001)
                    {
                        Mouse.Pressed = true;
                    }
                    else
                    {
                        Mouse.Pressed = false;
                    }
                    Mouse.Pos(record.MouseEvent.dwMousePosition.X, record.MouseEvent.dwMousePosition.Y);
                    //Console.WriteLine(string.Format("    X ...............:   {0,4:0}  ", record.MouseEvent.dwMousePosition.X));
                    //Console.WriteLine(string.Format("    Y ...............:   {0,4:0}  ", record.MouseEvent.dwMousePosition.Y));
                    //Console.WriteLine(string.Format("    dwButtonState ...: 0x{0:X4}  ", record.MouseEvent.dwButtonState));
                    //Console.WriteLine(string.Format("    dwControlKeyState: 0x{0:X4}  ", record.MouseEvent.dwControlKeyState));
                    //Console.WriteLine(string.Format("    dwEventFlags ....: 0x{0:X4}  ", record.MouseEvent.dwEventFlags));
                }
                break;
                }
                if (Mouse.Pressed == true &&
                    Mouse._Pressed == false)
                {
                    Mouse.Clicked = true;
                }
                else
                {
                    Mouse.Clicked = false;
                }
            }
        }
コード例 #6
0
ファイル: Crt.cs プロジェクト: HolodeckOne/RMLib
        /// <summary>
        /// Determines if a key has been pressed on the keyboard.
        /// </summary>
        /// The key can be read using the ReadKey function.
        /// <remarks>
        /// </remarks>
        /// <returns>True If key has been pressed False If key has not been pressed</returns>
        public static bool KeyPressed()
        {
            lock (_Lock)
            {
                // Check if we have a key in the buffer already
                if (_KeyBuf.Count > 0) return true;

                uint NumberOfEvents = 0;
                do
                {
                    if (OSUtils.IsWindows)
                    {
                        NativeMethods.GetNumberOfConsoleInputEvents(_StdInputHandle, out NumberOfEvents);
                        if (NumberOfEvents > 0)
                        {
                            NativeMethods.INPUT_RECORD[] Buffer = new NativeMethods.INPUT_RECORD[1];
                            uint NumberOfEventsRead = 0;
                            if (NativeMethods.ReadConsoleInput(_StdInputHandle, Buffer, 1, out NumberOfEventsRead))
                            {
                                if ((Buffer[0].EventType == NativeMethods.KEY_EVENT) && (Buffer[0].KeyEvent.bKeyDown))
                                {
                                    bool Alt = (NativeMethods.GetKeyState(NativeMethods.VirtualKeyStates.VK_MENU) & 0x8000) == 0x8000;
                                    bool Ctrl = (NativeMethods.GetKeyState(NativeMethods.VirtualKeyStates.VK_CONTROL) & 0x8000) == 0x8000;
                                    bool Shift = (NativeMethods.GetKeyState(NativeMethods.VirtualKeyStates.VK_SHIFT) & 0x8000) == 0x8000;

                                    if ((Buffer[0].KeyEvent.wVirtualKeyCode >= 65) && (Buffer[0].KeyEvent.wVirtualKeyCode <= 90))
                                    {
                                        bool CapsLock = (NativeMethods.GetKeyState(NativeMethods.VirtualKeyStates.VK_CAPITAL) & 0x0001) == 0x0001;
                                        Shift ^= CapsLock;
                                    }

                                    if ((Buffer[0].KeyEvent.wVirtualKeyCode >= 96) && (Buffer[0].KeyEvent.wVirtualKeyCode <= 105))
                                    {
                                        bool NumLock = (NativeMethods.GetKeyState(NativeMethods.VirtualKeyStates.VK_NUMLOCK) & 0x0001) == 0x0001;
                                        Shift |= NumLock;
                                    }

                                    int Key = 0;
                                    if (Alt)
                                    {
                                        Key = TAltKeys[Buffer[0].KeyEvent.wVirtualKeyCode];
                                    }
                                    else if (Ctrl)
                                    {
                                        Key = TCtrlKeys[Buffer[0].KeyEvent.wVirtualKeyCode];
                                    }
                                    else if (Shift)
                                    {
                                        Key = TShiftKeys[Buffer[0].KeyEvent.wVirtualKeyCode];
                                    }
                                    else
                                    {
                                        Key = TKeys[Buffer[0].KeyEvent.wVirtualKeyCode];
                                    }

                                    if (Key >= 1000)
                                    {
                                        _KeyBuf.Enqueue((char)0);
                                        _KeyBuf.Enqueue((char)(Key - 1000));
                                    }
                                    else if (Key > 0)
                                    {
                                        _KeyBuf.Enqueue((char)Key);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        try
                        {
                            NumberOfEvents = (uint)(Console.KeyAvailable ? 1 : 0);
                            if (NumberOfEvents > 0)
                            {
                                ConsoleKeyInfo CKI = Console.ReadKey(true);
                                bool Alt = (CKI.Modifiers & ConsoleModifiers.Alt) == ConsoleModifiers.Alt;
                                bool Ctrl = (CKI.Modifiers & ConsoleModifiers.Control) == ConsoleModifiers.Control;
                                bool Shift = (CKI.Modifiers & ConsoleModifiers.Shift) == ConsoleModifiers.Shift;

                                if (((int)CKI.Key >= 65) && ((int)CKI.Key <= 90))
                                {
                                    try
                                    {
                                        Shift ^= Console.CapsLock;
                                    }
                                    catch (NotSupportedException)
                                    {
                                        // Looks like mono doesn't support this
                                    }
                                }

                                if (((int)CKI.Key >= 96) && ((int)CKI.Key <= 105))
                                {
                                    Shift |= Console.NumberLock;
                                }

                                int Key = 0;
                                if (Alt)
                                {
                                    Key = TAltKeys[(int)CKI.Key];
                                }
                                else if (Ctrl)
                                {
                                    Key = TCtrlKeys[(int)CKI.Key];
                                }
                                else if (Shift)
                                {
                                    Key = TShiftKeys[(int)CKI.Key];
                                }
                                else
                                {
                                    Key = TKeys[(int)CKI.Key];
                                }

                                if (Key >= 1000)
                                {
                                    _KeyBuf.Enqueue((char)0);
                                    _KeyBuf.Enqueue((char)(Key - 1000));
                                }
                                else if (Key > 0)
                                {
                                    _KeyBuf.Enqueue((char)Key);
                                }
                            }
                        }
                        catch (NotImplementedException)
                        {
                            // Can't do that
                            NumberOfEvents = 0;
                        }
                    }
                } while (NumberOfEvents > 0);

                return false;
            }
        }