VB.net / IO / 获取鼠标键盘事件的钩子函数
VB.net 中获取鼠标键盘的钩子函数。可以将代码粘贴至一个新建模块,然后在主程序中声明一个Hook,调用Hook的事件就可以得到鼠标键盘的返回值了。(原谅我把VB.net写出了Python风格…)
Imports System.ComponentModel
Imports System.Reflection
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Public Class SystemHook
#Region "定义结构"
Private Structure MouseHookStruct
Dim X,Y As Single, Hwnd, WHitTestCode, DwExtraInfo As Integer: End Structure
Private Structure MouseLLHookStruct
Dim X,Y As Single, MouseData, Flags, Time, DwExtraInfo As Integer: End Structure
Private Structure KeyboardHookStruct
Dim vkCode, ScanCode, Flags, Time, DwExtraInfo As Integer: End Structure
Public myeor As String
#End Region
#Region "API声明导入"
Private Declare Function SetWindowsHookExA Lib "user32" (ByVal idHook As Integer, ByVal lpfn As HookProc, ByVal hMod As IntPtr, ByVal dwThreadId As Integer) As Integer
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Int32, ByVal lpfn As HookProc, ByVal hMod As IntPtr, ByVal dwThreadId As Int32) As Int32
'SetWindowsHookEx(安装的钩子的类型,消息的处理函数,应用程序事例句柄,线程ID)
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal idHook As Int32) As Int32
Private Declare Function CallNextHookEx Lib "user32" (ByVal idHook As Int32, ByVal nCode As Int32, ByVal wParam As Int32, ByVal lParam As IntPtr) As Int32
Private Declare Function ToAscii Lib "user32" (ByVal uVirtKey As Int32, ByVal uScancode As Int32, ByVal lpdKeyState As Byte(), ByVal lpwTransKey As Byte(), ByVal fuState As Int32) As Int32
Private Declare Function GetKeyboardState Lib "user32" (ByVal pbKeyState As Byte()) As Int32
Private Declare Function GetKeyState Lib "user32" (ByVal vKey As Int32) As Short
Private Delegate Function HookProc(ByVal nCode As Int32, ByVal wParam As Int32, ByVal lParam As IntPtr) As Int32
#End Region
#Region "常量声明"
Private Const WH_MOUSE_LL = 14, WH_KEYBOARD_LL = 13, WH_MOUSE = 7, WH_KEYBOARD = 2, WM_MOUSEMOVE = &H200, WM_LBUTTONDOWN = &H201, WM_RBUTTONDOWN = &H204, WM_MBUTTONDOWN = &H207, WM_LBUTTONUP = &H202, WM_RBUTTONUP = &H205, WM_MBUTTONUP = &H208, WM_LBUTTONDBLCLK = &H203, WM_RBUTTONDBLCLK = &H206, WM_MBUTTONDBLCLK = &H209, WM_MOUSEWHEEL