ALT+F4を無効にする

注意:
この文書は以前「.NETでいきまっしょい!」で公開していたものですが、公開以降メンテナンスされていません。 今や古い情報となった内容が記載されている場合があるのでご注意ください。

 オーバーライドしたWndProcでALT+F4のキー入力メッセージを捕獲し、何も処理しないことで無かったことにする。 ALT+F4を押したときにはWM_SYSKEYDOWNメッセージが送信されてくる。
VB.NET
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
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
C#
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
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 );
        }
    }
}