Có những lúc chíp muốn người sử dụng phải bấm một nút lệnh nào đó để đóng Access, vì lúc đó chíp cần code thêm vài dòng, ví dụ là trả font hệ thống cho windows.
Chứ để người dùng quen tay bấm vào cái nút [x] thì ôi thôi mất công toi của chíp. Vì vậy, chíp mày mò và tìm ra một vài hàm API để thực hiện chức năng này. Hy vọng sẽ hữu ích cho những ai gặp phải tình huống giống chíp.
Chíp tạo một module mới lưu các hàm cần sử dụng.
'Chíp khai báo cáo hằng số
Private Const MF_DISABLED = &H2&
Private Const MF_ENABLED = &H0&
Private Const MF_GRAYED = &H1&
'Chíp khai báo cáo hàm API cần dùng
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As Long
Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long
'Chíp tạo các Sub
Public Sub DisableSysMenu(ByVal hmenuTrackPopup As Long, ByVal mPosition As Long, ByVal mstr As String)
Dim r1 As Long
r1 = ModifyMenu(hmenuTrackPopup, mPosition, MF_DISABLED Or MF_GRAYED, mPosition, mstr)
End Sub
Public Sub EnableSysMenu(ByVal hmenuTrackPopup As Long, ByVal mPosition As Long, ByVal mstr As String)
Dim r1 As Long
r1 = ModifyMenu(hmenuTrackPopup, mPosition, MF_ENABLED, mPosition, mstr)
End Sub
Public Sub NoCloseButton(ByVal mhwnd As Long)
Dim mstr As String
mstr = String$(100, " ")
r2 = GetSystemMenu(mhwnd, 0)
r3 = GetMenuString(r2, 61536, mstr, 100, 0)
mstr = Trim$(mstr)
Call DisableSysMenu(r2, 61536, mstr)
End Sub
Public Sub YesCloseButton(ByVal mhwnd As Long)
Dim mstr As String
mstr = String$(100, " ")
r2 = GetSystemMenu(mhwnd, 0)
r3 = GetMenuString(r2, 61536, mstr, 100, 0)
mstr = Trim$(mstr)
Call EnableSysMenu(r2, 61536, mstr)
End Sub
'Chíp sử dụng
Tắt hiệu ứng [x]
Call NoCloseButton(Application.hWndAccessApp)
Mở hiệu ứng [x]
Call YesCloseButton(Application.hWndAccessApp)
Chứ để người dùng quen tay bấm vào cái nút [x] thì ôi thôi mất công toi của chíp. Vì vậy, chíp mày mò và tìm ra một vài hàm API để thực hiện chức năng này. Hy vọng sẽ hữu ích cho những ai gặp phải tình huống giống chíp.
Chíp tạo một module mới lưu các hàm cần sử dụng.
'Chíp khai báo cáo hằng số
Private Const MF_DISABLED = &H2&
Private Const MF_ENABLED = &H0&
Private Const MF_GRAYED = &H1&
'Chíp khai báo cáo hàm API cần dùng
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As Long
Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long
'Chíp tạo các Sub
Public Sub DisableSysMenu(ByVal hmenuTrackPopup As Long, ByVal mPosition As Long, ByVal mstr As String)
Dim r1 As Long
r1 = ModifyMenu(hmenuTrackPopup, mPosition, MF_DISABLED Or MF_GRAYED, mPosition, mstr)
End Sub
Public Sub EnableSysMenu(ByVal hmenuTrackPopup As Long, ByVal mPosition As Long, ByVal mstr As String)
Dim r1 As Long
r1 = ModifyMenu(hmenuTrackPopup, mPosition, MF_ENABLED, mPosition, mstr)
End Sub
Public Sub NoCloseButton(ByVal mhwnd As Long)
Dim mstr As String
mstr = String$(100, " ")
r2 = GetSystemMenu(mhwnd, 0)
r3 = GetMenuString(r2, 61536, mstr, 100, 0)
mstr = Trim$(mstr)
Call DisableSysMenu(r2, 61536, mstr)
End Sub
Public Sub YesCloseButton(ByVal mhwnd As Long)
Dim mstr As String
mstr = String$(100, " ")
r2 = GetSystemMenu(mhwnd, 0)
r3 = GetMenuString(r2, 61536, mstr, 100, 0)
mstr = Trim$(mstr)
Call EnableSysMenu(r2, 61536, mstr)
End Sub
'Chíp sử dụng
Tắt hiệu ứng [x]
Call NoCloseButton(Application.hWndAccessApp)
Mở hiệu ứng [x]
Call YesCloseButton(Application.hWndAccessApp)