鼠标键盘钩子的问题

csproj 2009-12-13 07:14:31
动鼠标或者键盘lable1.text就加1
我一直动鼠标正常,但是一敲键盘就报错:
对“WindowsApplication1!WindowsApplication1.Form1+HookProc::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。
下面是代码
Public Class Form1
Public Delegate Function HookProc(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Integer, ByVal lpfn As HookProc, ByVal hmod As Integer, ByVal dwThreadId As Integer) As Integer
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Integer) As Integer
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Integer, ByVal ncode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

Public hKeyBoardHook As Integer
Public hMouseHook As Integer
Public Const WH_MOUSE As Integer = 7
Public Const WH_KEYBOARD As Integer = 2
Private mHookProcedure As HookProc


Public Sub UnHook()

If hKeyBoardHook <> 0 Then
UnhookWindowsHookEx(hKeyBoardHook)
hKeyBoardHook = 0
End If

If hMouseHook <> 0 Then
UnhookWindowsHookEx(hMouseHook)
hMouseHook = 0
End If

End Sub

Public Sub SetHook()
If hKeyBoardHook = 0 Then
mHookProcedure = New HookProc(AddressOf KBHookProc)
hKeyBoardHook = SetWindowsHookEx(WH_KEYBOARD, mHookProcedure, 0, System.AppDomain.GetCurrentThreadId())
End If
If hMouseHook = 0 Then
mHookProcedure = New HookProc(AddressOf MSHookProc)
hMouseHook = SetWindowsHookEx(WH_MOUSE, mHookProcedure, 0, System.AppDomain.GetCurrentThreadId())
End If

End Sub


Public Function MSHookProc(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Me.Label1.Text += 1
hKeyBoardHook = CallNextHookEx(hMouseHook, nCode, wParam, lParam)
Return hKeyBoardHook
End Function
Public Function KBHookProc(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Me.Label1.Text += 1
KBHookProc = CallNextHookEx(hKeyBoardHook, nCode, wParam, lParam)
Return KBHookProc
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SetHook()
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
UnHook()
End Sub
End Class
...全文
150 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
z8y8x 2010-01-07
  • 打赏
  • 举报
回复
UP
csproj 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 veron_04 的回复:]
http://download.csdn.net/source/1860777
[/Quote]
VB.net已经没有Caption了


我的问题解决了 谢谢大家
舉杯邀明月 2009-12-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jiabiao113 的回复:]
晕,仔细一看,才发现发错地方了
[/Quote]
发错了地方可以移动啊 ..........
cbm6666 2009-12-13
  • 打赏
  • 举报
回复
Label1.text ??

Label1.Caption
贝隆 2009-12-13
  • 打赏
  • 举报
回复
csproj 2009-12-13
  • 打赏
  • 举报
回复
晕,仔细一看,才发现发错地方了

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧