Здравствуйте, YourLastSong, Вы писали:
YLS>Здравствуйте, уважаемые господа.
YLS>Существует ли вообще возможность сделать так, чтобы пользователь не мог закр. программу при нажатии на кнопку Close в заголовке окна консоли или выполнять при этом какой-то опр. код (например, сообщение о том, что в данный момент этого делать не стоит)?
YLS>Заранее благодарю за возможные ответы.
В С# это можно сделать следующим кодом. В C, C++ это сделать
еще проще, так как в коде используется только WinAPI
public static class NativeMethods
{
[DllImport("user32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hWnd, [MarshalAs(UnmanagedType.Bool)] bool bRevert);
[DllImport("user32.dll")]
static extern int GetMenuItemCount(IntPtr hMenu);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool DrawMenuBar(IntPtr hWnd);
[DllImport("user32.dll")]
[return : MarshalAs(UnmanagedType.Bool)]
static extern bool RemoveMenu(IntPtr hMenu, uint uPosition, uint uFlags);
private const Int32 MF_BYPOSITION = 0x400;
private const Int32 MF_REMOVE = 0x1000;
public static void RemoveCloseButton()
{
IntPtr hWin = Process.GetCurrentProcess().MainWindowHandle;
if (hWin != IntPtr.Zero)
{
IntPtr hMenu = GetSystemMenu(hWin, false);
if (hMenu != IntPtr.Zero)
{
int n = GetMenuItemCount(hMenu);
int max = 20;
while (n > 0 && max > 0)
{
RemoveMenu(hMenu, (uint)(n - 1), MF_BYPOSITION | MF_REMOVE);
n = GetMenuItemCount(hMenu);
--max;
}
DrawMenuBar(hWin);
}
}
}
}