オーバーライドしたWndProcでALT+F4のキー入力メッセージを捕獲し、何も処理しないことで無かったことにする。 ALT+F4を押したときにはWM_SYSKEYDOWNメッセージが送信されてくる。
public class Form1 : System.Windows.Forms.Form
{
// 途中略
// WndProcメソッドをオーバーライドし
// ALT+F4で閉じることができないようにする
protected override void WndProc( ref Message m )
{
const int WM_SYSKEYDOWN = 0x0104;
const int VK_F4 = 0x73;
// ウィンドウを閉じない
if ( m.Msg == WM_SYSKEYDOWN && m.WParam.ToInt32() == VK_F4 )
{
// ALT+F4に対する処理を行わない
m.Result = IntPtr.Zero;
}
else
{
base.WndProc( ref m );
}
}
}
Public Class Form1
Inherits System.Windows.Forms.Form
#Region " Windows フォーム デザイナで生成されたコード "
#End Region
' WndProcメソッドをオーバーライドし
' ALT+F4で閉じることができないようにする
Protected Overrides Sub WndProc(ByRef m As Message)
Const WM_SYSKEYDOWN As Integer = &H104
Const VK_F4 As Integer = &H73
' ウィンドウを閉じない
If m.Msg = WM_SYSKEYDOWN AndAlso m.WParam.ToInt32() = VK_F4 Then
' ALT+F4に対する処理を行わない
m.Result = IntPtr.Zero
Else
MyBase.WndProc(m)
End If
End Sub
End Class