none
Aus der MSDN Hotline: Close-Button einer Console Application deaktivieren RRS feed

  • Allgemeine Diskussion

  • Hallo zusammen,

    heute wurde uns bei der MSDN Hotline unter anderem folgende Frage gestellt:
    Wie kann ich bei einer Konsolenanwendung den Close-Button deaktivieren?

    Unsere Antwort bzw. unser Lösungsvorschlag darauf war:
    Diese Aufgabe kann man mit .NET im Moment nicht direkt erledigen. Deswegen muss man InterOp verwenden und mit der Windows API arbeiten. Den folgenden Forumeintrag von David Morton beschreibt, wie die Aufgabe zu lösen ist:

    using System;
    using System.Runtime.InteropServices;
    using System.Diagnostics;
    
    namespace ConsoleApplication
    
    {
      public class Program
      {
    
        [DllImport("user32.dll")]
        static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);
        [DllImport("user32.dll")]
        static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
        [DllImport("user32.dll")]
        static extern IntPtr RemoveMenu(IntPtr hMenu, uint nPosition, uint wFlags);
        internal const uint SC_CLOSE = 0xF060;
        internal const uint MF_GRAYED = 0x00000001;
        internal const uint MF_BYCOMMAND = 0x00000000;
    
        static void Main(string[] args)
        {
          IntPtr hMenu = Process.GetCurrentProcess().MainWindowHandle;
          IntPtr hSystemMenu = GetSystemMenu(hMenu, false);
          EnableMenuItem(hSystemMenu, SC_CLOSE, MF_GRAYED);
          RemoveMenu(hSystemMenu, SC_CLOSE, MF_BYCOMMAND); 
    
          Console.ReadLine();
    
        }
      }
    } 
    

    Mehr Informationen zu dem Thema findet man auf den folgenden Adressen in der MSDN Online:

    1. MSDN Forums: disable close button in console application in c#
    2. MSDN: DllImportAttribute Class

    Viele Grüße,
    Atanas Dimitrov
    MSDN Hotline für MSDN Online Deutschland

    Disclaimer:
    Bitte haben Sie Verständnis dafür, dass wir hier auf Rückfragen gar nicht oder nur sehr zeitverzögert antworten können.
    Bitte nutzen Sie für Rückfragen oder neue Fragen den telefonischen Weg über die MSDN Hotline: http://www.msdn-online.de/Hotline 
    MSDN Hotline: Schnelle & kompetente Hilfe für Entwickler: kostenfrei!

    Es gelten für die MSDN Hotline und dieses Posting diese Nutzungsbedingungen, Hinweise zu Markenzeichen sowie die allgemein gültigen Informationen zur Datensicherheit sowie die gesonderten Nutzungsbedingungen für die MSDN Hotline.

    Mittwoch, 1. September 2010 15:32