Отключить закрытие терминала Windows приложения консоли в C#C#

Место общения программистов C#
Ответить
Anonymous
 Отключить закрытие терминала Windows приложения консоли в C#

Сообщение Anonymous »

Я разрабатываю консольное приложение C#, нацеленное на как, то есть .NET Framework 4.7.2 и .net 8.
На классическом консольном хосте Windows (cmd.exe) я могу отключить или удалить кнопку закрытия ("x"), используя вызовы win32 PerceptecterLectrdler precemenu Precept -Code>. Запустив мое приложение в терминале Windows (в Windows 10/11), эти подходы не работают-кнопка закрытия остается включенной, и процесс прекращается, когда пользователь нажимает «x».

Код: Выделить всё

[DllImport("user32.dll")]
public static extern int DeleteMenu(IntPtr hMenu, int nPosition, int wFlags);

[DllImport("user32.dll")]
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

[DllImport("kernel32.dll", ExactSpelling = true)]
private static extern IntPtr GetConsoleWindow();

[DllImport("kernel32.dll")]
private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);

private delegate bool ConsoleCtrlDelegate(int CtrlType);

static void Main(string[] args)
{
DisableConsoleCloseButton();
SetConsoleCtrlHandler(new ConsoleCtrlDelegate(ConsoleCtrlCheck), true);
// ...
}

private static void DisableConsoleCloseButton()
{
IntPtr consoleWindow = GetConsoleWindow();
if (consoleWindow != IntPtr.Zero)
{
IntPtr systemMenu = GetSystemMenu(consoleWindow, false);
if (systemMenu != IntPtr.Zero)
{
DeleteMenu(systemMenu, SC_CLOSE, MF_BYCOMMAND);
}
}
}

private static bool ConsoleCtrlCheck(int ctrlType)
{
// Block all control events that could close the console
switch (ctrlType)
{
case 0: // CTRL_C_EVENT
case 1: // CTRL_BREAK_EVENT
case 2: // CTRL_CLOSE_EVENT
case 5: // CTRL_LOGOFF_EVENT
case 6: // CTRL_SHUTDOWN_EVENT
return true; // Ignore/Block
default:
return false;
}
}
(в основном взято с https://stackoverflow.com/a/6054593/17198402)образное, есть ли способ отключить, удалить или переоценить кнопку закрытия ("x") в терминале Windows для приложения C# консоль? Моя цель состоит в том, чтобы не позволить пользователю закрыть терминал. Идея состоит в том, что пользователь должен закрыть пользовательский интерфейс (который, в свою очередь, закрывает консоль), а не наоборот. Да, услуга будет лучшим решением, а не консоль, но это бизнес -требование, поэтому я не контролирую его. Мне только интересно, есть ли решение этой проблемы.

Подробнее здесь: https://stackoverflow.com/questions/797 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»