Option Explicit
Private Declare Function DeleteMenu Lib "User32" (ByVal _
hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetSystemMenu Lib "User32" (ByVal _
hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetWindowLong Lib "User32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "User32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const GWL_STYLE = (-16)
Private Const MF_BYCOMMAND = &H0&
Private Const MF_BYPOSITION = &H400
Private Const SC_MINIMIZE = &HF020
Private Const SC_CLOSE = 6
Private Const WS_MINIMIZEBOX = &H20000
Dim hMenu As Long, k As Long, hwnd As Long
Private Sub Désactiver_Croix()
hwnd = FindWindowA(vbNullString, Application.Caption)
hMenu = GetSystemMenu(hwnd, False)
k = DeleteMenu(hMenu, SC_CLOSE, MF_BYPOSITION)
End Sub
Private Sub Désactiver_Minimiser()
hwnd = FindWindowA(vbNullString, Application.Caption)
hMenu = GetSystemMenu(hwnd, False)
k = DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
k = GetWindowLong(hwnd, GWL_STYLE)
k = k Xor WS_MINIMIZEBOX
SetWindowLong hwnd, GWL_STYLE, k
End Sub
Private Sub Réactiver_Menu()
hwnd = FindWindowA(vbNullString, Application.Caption)
hMenu = GetSystemMenu(hwnd, True)
k = DeleteMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND)
k = GetWindowLong(hwnd, GWL_STYLE)
k = k Xor WS_MINIMIZEBOX
SetWindowLong hwnd, GWL_STYLE, k
End Sub
Sub SystemMenu()
Désactiver_Croix
Désactiver_Minimiser
End Sub
Sub SystemMenuInit()
Réactiver_Menu
End Sub