コード例 #1
0
        public static void Start()
        {
            if (!Run)
            {
                Run = true;
                IntPtr handleIn = GetStdHandle(STD_INPUT_HANDLE);
                new Thread(() =>
                {
                    while (true)
                    {
                        uint numRead          = 0;
                        INPUT_RECORD[] record = new INPUT_RECORD[1];
                        record[0]             = new INPUT_RECORD();
                        ReadConsoleInput(handleIn, record, 1, ref numRead);
                        if (Run)
                        {
                            switch (record[0].EventType)
                            {
                            case INPUT_RECORD.MOUSE_EVENT:
                                MouseEvent?.Invoke(record[0].MouseEvent);
                                switch (record[0].MouseEvent.dwButtonState)
                                {
                                case MOUSE_EVENT_RECORD.FROM_LEFT_1ST_BUTTON_PRESSED:
                                    ClickEvent?.Invoke(record[0].MouseEvent);
                                    break;

                                case MOUSE_EVENT_RECORD.SCROLLED_UP:
                                    ScrollUpEvent?.Invoke(record[0].MouseEvent);
                                    break;

                                case MOUSE_EVENT_RECORD.SCROLLED_DOWN:
                                    ScrollDownEvent?.Invoke(record[0].MouseEvent);
                                    break;
                                }
                                break;

                            case INPUT_RECORD.KEY_EVENT:
                                KeyEvent?.Invoke(record[0].KeyEvent);
                                break;

                            case INPUT_RECORD.WINDOW_BUFFER_SIZE_EVENT:
                                WindowBufferSizeEvent?.Invoke(record[0].WindowBufferSizeEvent);
                                break;
                            }
                        }
                        else
                        {
                            uint numWritten = 0;
                            WriteConsoleInput(handleIn, record, 1, ref numWritten);
                            return;
                        }
                    }
                }).Start();
            }
        }
コード例 #2
0
            public static void Start()
            {
                if (ConsoleInputHandle == IntPtr.Zero)
                {
                    return;
                }

                if (Running)
                {
                    return;
                }

                Running = true;

                IsEchoInputEnabled   = true;
                IsWindowInputEnabled = true;
                IsMouseInputEnabled  = true;

                IntPtr handleIn = ConsoleInputHandle;

                new Thread(() =>
                {
                    while (true)
                    {
                        UInt32 numRead        = 0;
                        INPUT_RECORD[] record = new INPUT_RECORD[1];
                        record[0]             = new INPUT_RECORD();
                        ReadConsoleInput(handleIn, record, 1, ref numRead);
                        if (Running)
                        {
                            switch (record[0].EventType)
                            {
                            case INPUT_RECORD.MOUSE_EVENT:
                                MouseEvent?.Invoke(record[0].MouseEvent);
                                break;

                            case INPUT_RECORD.KEY_EVENT:
                                KeyEvent?.Invoke(record[0].KeyEvent);
                                break;

                            case INPUT_RECORD.WINDOW_BUFFER_SIZE_EVENT:
                                WindowBufferSizeEvent?.Invoke(record[0].WindowBufferSizeEvent);
                                break;
                            }
                        }
                        else
                        {
                            UInt32 numWritten = 0;
                            WriteConsoleInput(handleIn, record, 1, ref numWritten);
                            return;
                        }
                    }
                }).Start();
            }
コード例 #3
0
        public static void Start()
        {
            if (!Run)
            {
                Run = true;

                Task.Factory.StartNew(() =>
                {
                    IntPtr handleIn = NativeMethods.GetStdHandle(NativeMethods.STD_INPUT_HANDLE);

                    uint mode = 0;
                    NativeMethods.GetConsoleMode(handleIn, ref mode);

                    mode  = ~NativeMethods.ENABLE_QUICK_EDIT_MODE; //disable
                    mode |= NativeMethods.ENABLE_MOUSE_INPUT;      //enable

                    NativeMethods.SetConsoleMode(handleIn, mode);

                    while (true)
                    {
                        uint numRead = 0;
                        NativeMethods.INPUT_RECORD[] record = new NativeMethods.INPUT_RECORD[1];
                        record[0] = new NativeMethods.INPUT_RECORD();
                        NativeMethods.ReadConsoleInput(handleIn, record, 1, ref numRead);
                        if (Run)
                        {
                            switch (record[0].EventType)
                            {
                            case NativeMethods.INPUT_RECORD.MOUSE_EVENT:
                                MouseEventInvoke(record[0].MouseEvent);
                                break;

                            case NativeMethods.INPUT_RECORD.KEY_EVENT:
                                KeyEvent?.Invoke(record[0].KeyEvent);
                                break;

                            case NativeMethods.INPUT_RECORD.WINDOW_BUFFER_SIZE_EVENT:
                                WindowBufferSizeEvent?.Invoke(record[0].WindowBufferSizeEvent);
                                break;
                            }
                        }
                        else
                        {
                            uint numWritten = 0;
                            NativeMethods.WriteConsoleInput(handleIn, record, 1, ref numWritten);
                            return;
                        }
                    }
                });
            }
        }
コード例 #4
0
        public static void Start()
        {
            if (!run)
            {
                run = true;
                IntPtr handleIn = GetStdHandle(STD_INPUT_HANDLE);
                new Thread(() =>
                {
                    while (true)
                    {
                        uint numRead          = 0;
                        INPUT_RECORD[] record = new INPUT_RECORD[1];
                        record[0]             = new INPUT_RECORD();
                        ReadConsoleInput(handleIn, record, 1, ref numRead);
                        if (run)
                        {
                            switch (record[0].EventType)
                            {
                            case INPUT_RECORD.MOUSE_EVENT:
                                MouseEvent?.Invoke(record[0].MouseEvent);
                                break;

                            case INPUT_RECORD.KEY_EVENT:
                                KeyEvent?.Invoke(record[0].KeyEvent);
                                break;

                            case INPUT_RECORD.WINDOW_BUFFER_SIZE_EVENT:
                                WindowBufferSizeEvent?.Invoke(record[0].WindowBufferSizeEvent);
                                break;
                            }
                        }
                        else
                        {
                            uint numWritten = 0;
                            WriteConsoleInput(handleIn, record, 1, ref numWritten);
                            return;
                        }
                    }
                }).Start();
            }
        }
コード例 #5
0
        public void Start()
        {
            if (isRunning)
            {
                return;
            }

            Prepare();
            isRunning = true;

            IntPtr handleIn = GetStdHandle(STD_INPUT_HANDLE);

            thread = new Thread(
                () =>
            {
                while (true)
                {
                    uint numRead          = 0;
                    INPUT_RECORD[] record = new INPUT_RECORD[1];
                    record[0]             = new INPUT_RECORD();
                    ReadConsoleInput(handleIn, record, 1, ref numRead);
                    if (isRunning)
                    {
                        switch (record[0].EventType)
                        {
                        case INPUT_RECORD.MOUSE_EVENT:
                            var mouseEvent = record[0].MouseEvent;
                            if (mouseEvent.dwButtonState == dwButtonStates.FROM_LEFT_1ST_BUTTON_PRESSED)
                            {
                                MouseClicked?.Invoke(this, CreateEventArgs(mouseEvent));
                            }
                            if (mouseEvent.dwEventFlags == dwEventFlags.DOUBLE_CLICK)
                            {
                                MouseDoubleClicked?.Invoke(this, CreateEventArgs(mouseEvent));
                            }
                            else if (mouseEvent.dwEventFlags == dwEventFlags.MOUSE_MOVED)
                            {
                                MouseMoved?.Invoke(this, CreateEventArgs(mouseEvent));
                            }
                            else if (mouseEvent.dwEventFlags == dwEventFlags.MOUSE_HWHEELED || mouseEvent.dwEventFlags == dwEventFlags.MOUSE_WHEELED)
                            {
                                MouseWheelChanged?.Invoke(this, CreateEventArgs(mouseEvent));
                            }

                            break;

                        case INPUT_RECORD.KEY_EVENT:
                            var keyEvent = record[0].KeyEvent;

                            if (keyEvent.bKeyDown)
                            {
                                KeyDown?.Invoke(this, CreateEventArgs(keyEvent));
                            }

                            break;

                        case INPUT_RECORD.WINDOW_BUFFER_SIZE_EVENT:
                            WindowBufferSizeEvent?.Invoke(record[0].WindowBufferSizeEvent);
                            break;
                        }
                    }
                    else
                    {
                        uint numWritten = 0;
                        WriteConsoleInput(handleIn, record, 1, ref numWritten);
                        return;
                    }
                }
            });

            thread.Start();
        }