как я могу отключить кнопку закрытия окна консоли в консольном приложении Visual Studio?

#c# #.net #console

#c# #.net #консоль

Вопрос:

Мне нужно отключить кнопку закрытия в окне консоли консольного приложения Visual Studio, написанного на C #. Я хочу, чтобы приложение работало до его завершения, и пользователь не должен иметь возможности остановить его, закрыв окно консоли. Я использую Visual Studio 2010

Комментарии:

1. Вам также нужно будет заблокировать щелчок правой кнопкой мыши по приложению на панели задач и выбрать «Закрыть». И, может быть, taskmanager?

Ответ №1:

Вот пример отключения кнопки закрытия в окне консоли:

 class Program
{
    private const int MF_BYCOMMAND = 0x00000000;
    public const int SC_CLOSE = 0xF060;

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

    static void Main(string[] args)
    {
        DeleteMenu(GetSystemMenu(GetConsoleWindow(), false),SC_CLOSE, MF_BYCOMMAND);
        Console.Read();
    }
}
  

Комментарии:

1. Как насчет того, чтобы щелкнуть правой кнопкой мыши по приложению на панели задач и затем выбрать закрыть?

2. Спасибо. Работает как по волшебству. Хотя, как указал PowerRoy, окно консоли все еще можно закрыть с панели задач, я доволен данным решением. Не могли бы вы, пожалуйста, кратко объяснить, что на самом деле делает код?

3. @vjain27: Все есть в msdn 🙂 GetConsoleWindow Извлекает дескриптор окна, используемый консолью, связанной с вызывающим процессом. GetSystemMenu Возвращает дескриптор в меню Windows. И DeleteMenu удаляет указанный пункт меню. И, наконец, константы, которые вы можете найти здесь .

4. @PowerRoy: Где-то я читал, что это сложно сделать. Но, возможно, это возможно — я не знаю 🙂 Может быть, вы можете попробовать отправить свое приложение в системный трей?