Re: Как запретить закрытие окна консоли
От: rsdn_gurin  
Дата: 25.12.11 12:40
Оценка:
Здравствуйте, 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);
        }
      }
    }
  }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.