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(); } }
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(); }
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; } } }); } }
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(); } }
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(); }