VB 2005 中用P/Invoke进行windows HOOK 的方法

本文提供了一个使用C#实现鼠标钩子功能的示例代码,该代码展示了如何通过设置Windows钩子来捕获并处理鼠标事件。
Imports  System.Runtime.InteropServices

Public   Class Form1
  
Private Structure MOUSEHOOKSTRUCT
    
Public pt As Point
    
Public hWnd As IntPtr
    
Public hitTest As Int32
    
Public extra As Int32
  
End Structure


  
Private _mouseHook As Int32 = 0
  
Private Const WH_MOUSE As Int32 = 7
  
Private Delegate Function CallBack(ByVal nCode As Int32, ByVal wParam As IntPtr, ByRef lParam As MOUSEHOOKSTRUCT) As Int32
  
<MarshalAs(UnmanagedType.FunctionPtr)> Private _mouseProc As CallBack
  
Private Declare Function SetWindowsHookExW Lib "user32.dll" (ByVal idHook As Int32, ByVal HookProc As CallBack, ByVal hInstance As IntPtr, ByVal wParam As Int32) As Int32
  
Private Declare Function CallNextHookEx Lib "user32.dll" (ByVal idHook As Int32, ByVal nCode As Int32, ByVal wParam As IntPtr, ByRef lParam As MOUSEHOOKSTRUCT) As Int32
  
Private Declare Function GetCurrentThreadId Lib "kernel32.dll" () As Integer

  
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
If _mouseHook = 0 Then
      _mouseProc 
= New CallBack(AddressOf MouseHookProc)
      _mouseHook 
= SetWindowsHookExW(WH_MOUSE, _mouseProc, IntPtr.Zero, GetCurrentThreadId)
      
Dim err As Integer = Marshal.GetLastWin32Error
    
End If
  
End Sub


  
Private Shared Function MouseHookProc(ByVal nCode As Int32, ByVal wParam As IntPtr, ByRef lParam As MOUSEHOOKSTRUCT) As Int32
    Debug.Print(
"Message = {0}, x={1}, y={2}", wParam.ToInt32, lParam.pt.X, lParam.pt.Y)
    
Return CallNextHookEx(WH_MOUSE, nCode, wParam, lParam)
  
End Function


End Class

 
这是MSDN论坛上一个MVP的代码,贴到这里了^_^ ,下面是原帖子:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=585131&SiteID=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值