更新时间2018-10-21 09:31:00
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd _
As Long, ByVal bRevert As Boolean) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal _
hMenu As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal _
hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) _
As Long
Private Declare Function DrawMenuBar Lib "user32" _
(ByVal hwnd As Long) As Long
Private Const MF_BYPOSITION = &H400&
Private Const MF_REMOVE = &H1000&
Private Declare Function GetKeyState Lib "user32" _
(ByVal nVirtKey As Long) As Integer
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy As Long)
Public Type KEYMSGS
vKey As Long
sKey As Long
flag As Long
time As Long
End Type
Public Const WH_KEYBOARD_LL = 13
Public Const VK_LWIN = &H5B
Public Const VK_RWIN = &H5C
Public Const HC_ACTION = 0
Public Const HC_SYSMODALOFF = 5
Public Const HC_SYSMODALON = 4
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105
Public P As KEYMSGS
Public lHook As Long
Private Declare Function GeSystemMenu Lib "user32" (ByVal hwnd _
As Long, ByVal bRevert As Boolean) As Long
Private Declare Function GeMenuItemCount Lib "user32" (ByVal _
hMenu As Long) As Long
Private Declare Function RemovMenu Lib "user32" (ByVal _
hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) _
As Long
Private Declare Function DraMenuBar Lib "user32" _
(ByVal hwnd As Long) As Long
Private Const M_BYPOSITION = &H400&
Private Const M_REMOVE = &H1000&
Public Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim fEatKeystroke As Boolean
If (nCode = HC_ACTION) Then
If wParam = WM_KEYDOWN Or wParam = WM_SYSKEYDOWN Or wParam = WM_KEYUP Or wParam = WM_SYSKEYUP Then
CopyMemory P, ByVal lParam, Len(P)
Select Case P.vKey
Case vbKeyF4
If (GetKeyState(vbKeyMenu) And &H8000) <> 0 Then '如果按了Alt+F4键
fEatKeystroke = True '就吃了
End If
End Select
End If
End If
If fEatKeystroke Then
LowLevelKeyboardProc = -1
Else
LowLevelKeyboardProc = CallNextHookEx(0, nCode, wParam, ByVal lParam)
End If
End Function
Public Sub DisableClose(frm As Form, Optional _
Disable As Boolean = True)
'Setting Disable to False disables the 'X',
'otherwise, it's reset
Dim hMenu As Long
Dim nCount As Long
If Disable Then
hMenu = GeSystemMenu(frm.hwnd, False)
nCount = GeMenuItemCount(hMenu)
Call RemovMenu(hMenu, nCount - 1, M_REMOVE Or _
M_BYPOSITION)
Call RemovMenu(hMenu, nCount - 2, M_REMOVE Or _
M_BYPOSITION)
DraMenuBar frm.hwnd
Else
GeSystemMenu frm.hwnd, True
DraMenuBar frm.hwnd
End If
End Sub
很明显的,你单词拼错了
GeSystemMenu
正确的是
GetSystemMenu