codice:
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Integer, ByVal revert As Integer) As Integer

    Private Declare Function EnableMenuItem Lib "user32" (ByVal menu As Integer, ByVal ideEnableItem As Integer, ByVal enable As Integer) As Integer

    Private Const SC_CLOSE As Integer = &HF060

    Private Const MF_BYCOMMAND As Integer = &H0

    Private Const MF_GRAYED As Integer = &H1

    Private Const MF_ENABLED As Integer = &H0

    Public Sub DisableFormCloseButton(ByVal form As System.Windows.Forms.Form)

        ' The return value specifies the previous state of the menu item (it is either

        ' MF_ENABLED or MF_GRAYED). 0xFFFFFFFF indicates that the menu item does not exist.

        Select Case EnableMenuItem(GetSystemMenu(form.Handle.ToInt32, 0), SC_CLOSE, MF_BYCOMMAND Or MF_GRAYED)

            Case MF_ENABLED

            Case MF_GRAYED

            Case &HFFFFFFFF

                Throw New Exception("The Close menu item does not exist.")

            Case Else

        End Select

    End Sub

    Public Sub EnableFormCloseButton(ByVal form As System.Windows.Forms.Form)
        EnableMenuItem(GetSystemMenu(form.Handle.ToInt32, 0), SC_CLOSE, MF_BYCOMMAND)
    End Sub