閉じるボタン等でのアプリ終了を無効化


閉じるボタン等でアプリを終了するのを禁止するには、WndProcをオーバーライドしてWM_SYSCOMMANDのSC_CLOSEを無視すればよい。
この方法では、閉じるボタンは押せる状態だが、押してもアプリは終了しなくなる。
また、アプリ左上のアイコンをクリックして表示されるメニューからの終了と、Alt+F4による終了も禁止できる。

タイトルバーの左上をダブルクリックは、パラメータ0xf063が飛んでくる。0xf063が何パラメータなのか調べてもわからなかったので、適当にSC_CLOSEDOUBLECLICKとする。


private const int SC_CLOSE = 0xf060;
private const int SC_CLOSEDOUBLECLICK = 0xf063;
private const int WM_SYSCOMMAND = 0x112;

bool isCloseEnable = false;

protected override void WndProc(ref Message m)
{
// WM_SYSCOMMANDのSC_CLOSEを無視する
if (m.Msg == WM_SYSCOMMAND
&& (m.WParam.ToInt64() == SC_CLOSE || m.WParam.ToInt64() == SC_CLOSEDOUBLECLICK)
&& !isCloseEnable)
{
return;
}
}