Hook函数增加if就出错, 拿掉就OK,怎么办?
'===================MODE=====================
Option Explicit
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 hHook As Long
Public Const WH_KEYBOARD = 2
'具体的钩子程序,本例中该过程被包含在Module1中
Public Function HookProc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'On Error Resume Next
Debug.Print iCode
HookProc = 0 '表示要处理这个消息
If iCode >= 0 Then
'屏蔽ALT+F4组合键
If wParam = 115 And (lParam And H20000000) <> 0 Then
If (lParam And &HC000000) = 0 Then '是否进行ALT+F4操作
HookProc = 1 '钩子吃掉这个消息
End If
End If
End If
'MsgBox "4"
Call CallNextHookEx(hHook, iCode, wParam, lParam) '将消息传给下一个钩子
'MsgBox "5"
End Function
Public Function EnableHook()
If hHook <> 0 Then
Exit Function
End If
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf _
HookProc, App.hInstance, App.ThreadID)
Form1.Caption = hHook
End Function
Public Function FreeHook()
If hHook <> 0 Then
UnhookWindowsHookEx hHook
hHook = 0
End If
End Function
'=================FROM1=================
'安装钩子
Private Sub Command1_Click()
Call EnableHook
End Sub
'卸载钩子
Private Sub Command2_Click()
Call FreeHook
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call FreeHook
End Sub
Private Sub Text1_Change()
On Error Resume Next
Text2 = Chr(Text1)
End Sub
'====================================================
'=================== 下面问题 ========================
'====================================================
上面代码, 为什么在钩子过程 hookproc里头 有下面的IF语句就会出错, 拿掉IF语句就不出错呢?
那个if语句是用来判断组合按键的!!!
If wParam = 115 And (lParam And H20000000) <> 0 Then
If (lParam And &HC000000) = 0 Then '是否进行ALT+F4操作
HookProc = 1 '钩子吃掉这个消息
End If
End If
老师们来指点一下, 谢谢, 一直没搞明白!!!
还有这个(lParam And H20000000)像这样的啥意思, 根据什么原理来判断ALT按键状态的?
[解决办法]
别着急,有人会帮你
[解决办法]
Call CallNextHookEx(hHook, iCode, wParam, lParam)
=>
HookProc = CallNextHookEx(hHook, iCode, wParam, lParam)
[解决办法]
[解决办法]
老马好眼力!
[解决办法]
嗯,一眼就可以了,另一眼闭着休息
