¿Cómo se desabilita programáticamente el modo de edición rápida de la aplicación de consola C #?

He intentado varias soluciones encontradas, como la que ->

http://www.pcreview.co.uk/forums/console-writeline-hangs-if-user-click-into-console-window-t1412701.html

Pero observé que el modo en GetConsoleMode (IntPtr hConsoleHandle, out int mode) será diferente para diferentes aplicaciones de la consola. No es constante.

¿Puedo desactivar clics del mouse (botones derecha / izquierda) en una aplicación de consola para lograr el mismo escenario. Descubrí que se puede hacer con IMessageFilter pero solo para la aplicación Window Form y no para la aplicación de la consola.

Por favor guía.

Si desea desactivar el modo de edición rápida, debe llamar a GetConsoleMode para obtener el modo actual. A continuación, borre el bit que permite una edición rápida y llame a SetConsoleMode . Suponiendo que tiene los prototipos administrados para las funciones no administradas, debería escribir:

const int ENABLE_QUICK_EDIT = 0x0040; IntPtr consoleHandle = GetConsoleWindow(); UInt32 consoleMode; // get current console mode if (!GetConsoleMode(consoleHandle, out consoleMode)) { // Error: Unable to get console mode. return; } // Clear the quick edit bit in the mode flags mode &= ~ENABLE_QUICK_EDIT; // set the new mode if (!SetConsoleMode(consoleHandle, consoleMode)) { // ERROR: Unable to set console mode } 

Si desea deshabilitar la entrada del mouse, quiere borrar el bit de entrada del mouse.

 const int ENABLE_MOUSE_INPUT = 0x0010; mode &= ~ENABLE_MOUSE_INPUT; 

Para aquellos como yo que les gusta el código no-brainer para copiar / pegar, aquí está el código inspirado en la respuesta aceptada:

 using System; using System.Runtime.InteropServices; static class DisableConsoleQuickEdit { const uint ENABLE_QUICK_EDIT = 0x0040; // STD_INPUT_HANDLE (DWORD): -10 is the standard input device. const int STD_INPUT_HANDLE = -10; [DllImport("kernel32.dll", SetLastError = true)] static extern IntPtr GetStdHandle(int nStdHandle); [DllImport("kernel32.dll")] static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode); [DllImport("kernel32.dll")] static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode); internal static bool Go() { IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE); // get current console mode uint consoleMode; if (!GetConsoleMode(consoleHandle, out consoleMode)) { // ERROR: Unable to get console mode. return false; } // Clear the quick edit bit in the mode flags consoleMode &= ~ENABLE_QUICK_EDIT; // set the new mode if (!SetConsoleMode(consoleHandle, consoleMode)) { // ERROR: Unable to set console mode return false; } return true; } } 

Mediante la combinación de códigos utilizada a continuación, puedo habilitar o deshabilitar el modo de edición rápida.

 const int ENABLE_QUICK_EDIT = 0x0040; // STD_INPUT_HANDLE (DWORD): -10 is the standard input device. const int STD_INPUT_HANDLE = -10; [DllImport("kernel32.dll", SetLastError = true)] static extern IntPtr GetStdHandle(int nStdHandle); [DllImport("kernel32.dll")] static extern bool GetConsoleMode(IntPtr hConsoleHandle, out int lpMode); [DllImport("kernel32.dll")] static extern bool SetConsoleMode(IntPtr hConsoleHandle, int dwMode); 

Para habilitar, haga simple currentConsoleMode &= ENABLE_QUICK_EDIT;

Y para deshabilitar, haz currentConsoleMode &= ~ENABLE_QUICK_EDIT

Y luego llama a SetConsoleMode .