Schließen eines Programms verhindern (WinForms.NET)

Written on January 21, 2004

Möchte man verhindern, daß eine Windows-Anwendung über den Close-Button (das x in der rechten oberen Ecke) oder die Taskleiste geschlossen wird, ist dies nicht ohne weiteres (also Properties o.ä.) möglich.

Man muß die Methode WndProc überschreiben und die Messages zum Form überwachen. Handelt es sich um das System-Kommando "SC_Close" (=0xF060), so darf die Message nicht an das Form weitergeleitet werden. Somit wird das Close-Command nicht verarbeitet, das Fenster bleibt geöffnet. Natürlich könnte man dem Fenster dann z.B. auch ein Minimize-Command unterschieben...

Der Code sieht wie folgt aus:

public const int SC_CLOSE = 0xF060;
public const int WM_SYSCOMMAND = 0x0112;

protected override void WndProc(ref System.Windows.Forms.Message m)
{
if(!(m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE))
{
base.WndProc(ref m);
}
}