как сделать так, чтобы консольное приложение c# не останавливалось при клике мышкой на консоль?
У меня есть консольное приложение которое постоянно выводит данные, но при клике мышкой на консоль программа останавливается, как сделать так чтобы она продолжала работать?
Ответы (1 шт):
Можно попробовать полностью отключить возможность выделения мышью.
Если нажать правой кнопкой на заголовке окна и перейти в Свойства то можно увидеть галочку в чекбоксе Выделение мышью. Её нам и необходимо будет убрать.

Для этого создадим такой статический класс, в котором будем устанавливать или снимать эту галочку:
static class ConsoleQuickEdit
{
const uint ENABLE_QUICK_EDIT = 0x0040;
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 Unset()
{
IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE);
// Получаем текущий режим
uint consoleMode;
if (!GetConsoleMode(consoleHandle, out consoleMode))
{
// ОШИБКА: невозможно получить текущий режим
return false;
}
// Очищаем бит, отвечающий за выделение мышью
consoleMode &= ~ENABLE_QUICK_EDIT;
// Устанавливаем новый режим
if (!SetConsoleMode(consoleHandle, consoleMode))
{
// ОШИБКА: Невозможно установить новый режим
return false;
}
return true;
}
internal static bool Set()
{
IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE);
// Получаем текущий режим
uint consoleMode;
if (!GetConsoleMode(consoleHandle, out consoleMode))
{
// ОШИБКА: невозможно получить текущий режим
return false;
}
// Устанавливаем бит, разрешающий выделение мышью
consoleMode |= ENABLE_QUICK_EDIT;
// Устанавливаем новый режим
if (!SetConsoleMode(consoleHandle, consoleMode))
{
// ОШИБКА: Невозможно установить новый режим
return false;
}
return true;
}
}
Соответственно его нужно будет вызвать в начале работы программы:
class Program
{
static void Main(string[] args)
{
ConsoleQuickEdit.Unset();
int i=0;
while(i<10000)
{
Console.WriteLine(i++);
}
ConsoleQuickEdit.Set();
while (true)
{
Console.WriteLine(i++);
}
}
}
Во время выполнения программы, можно попробовать открыть окно свойства и проверить, что галочка с Выделение мышью снята.