首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

鼠标键盘钩子的有关问题

2012-01-16 
鼠标键盘钩子的问题动鼠标或者键盘lable1.text就加1我一直动鼠标正常,但是一敲键盘就报错:对“WindowsAppli

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

VB code
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 SubEnd Class


[解决办法]
http://download.csdn.net/source/1860777
[解决办法]
Label1.text ??

Label1.Caption
[解决办法]
探讨
晕,仔细一看,才发现发错地方了

热点排行