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

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.