#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: Где-то я читал, что это сложно сделать. Но, возможно, это возможно — я не знаю 🙂 Может быть, вы можете попробовать отправить свое приложение в системный трей?