关于钩子函数子程序的问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 05:13:25
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hhook As Long) As Long
模块中的代码如下:
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 Function HookProc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
MsgBox 123
End Function

form1中的代码如下:
Dim hhook As Long
Private Sub Command1_Click()
hhook = SetWindowsHookEx(2, AddressOf HookProc, App.hInstance, 0)
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnhookWindowsHookEx hhook
End Sub

这是一个简单的键盘钩子,当成功启用了SetWindowsHookEx之后调用到了模块中的子程序HookProc,大家看到了我上面的代码,hookproc中只有一行就是msgbox 123,运行时没有问题,但是当我将msgbox 123改成了text1.text=123时,VB就自动关闭了,请教下大家这是什么原因?

跟你说下 vbgood网上有这个说明的:
在Hook的Proc中,最好不要使用VB自己的功能如msgbox等,因为会让VB IDE崩溃,最好使用API来操作类似于MessageBoxA。
我觉得你是不是应该尝试下Call 过程 然后过程中写?