2011-05-19 43 views
10

Necesito desactivar el botón de cerrar en la ventana de la consola de una consola de estudio visual aplicación escrita en C#. Quiero que la aplicación se ejecute hasta que complete y el usuario no debería poder detenerla cerrando la ventana de la consola. Estoy utilizando Visual Studio 2010¿Cómo puedo desactivar el botón Cerrar de la ventana de la consola en una aplicación de consola de estudio visual?

+1

También necesitará para bloquear botón derecho del ratón sobre la aplicación en la barra de tareas y seleccione 'cerca'. Y tal vez el administrador de tareas? – RvdK

Respuesta

39

He aquí un ejemplo de cómo deshabilitar el botón de cierre en la ventana de la consola:

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(); 
    } 
} 
+2

¿Qué tal hacer clic derecho en la aplicación en la barra de tareas y luego seleccionar cerrar? – RvdK

+0

Gracias. Funciona como un amuleto. Aunque, como señaló PowerRoy, la ventana de la consola aún se puede cerrar desde la barra de tareas, estoy contento con la solución dada. ¿Podría explicar brevemente qué hace realmente el código? – vjain27

+1

@ vjain27: Todo está en msdn :) [GetConsoleWindow] (http://msdn.microsoft.com/en-us/library/ms683175%28v=vs.85%29.aspx) Recupera el identificador de ventana utilizado por la consola asociado con el proceso de llamada. [GetSystemMenu] (http://msdn.microsoft.com/en-us/library/ms647985%28v=vs.85%29.aspx) Devuelve el control del menú de Windows. Y [DeleteMenu] (http://msdn.microsoft.com/en-us/library/ms647629%28VS.85%29.aspx) Elimina el elemento de menú especificado. Y, finalmente, constantes que puede encontrar [aquí] (http://www.pinvoke.net/default.aspx/user32.deletemenu). – Reniuz

Cuestiones relacionadas