
私人constant WH_MOUSE_LL = 14
私人建筑WH_KEYBOARD_LL = 13
私人建筑WH_MOUSE = 7
私人建筑WH_KEYBOARD = 2
私有const WM_MOUSEMOVE =&H200
私人建筑WM_LBUTTONDOWN =&H201
私人建筑WM_RBUTTONDOWN =&H204
私人建筑WM_MBUTTONDOWN =&H207
私人建筑WM_LBUTTONUP =&H202
私有const WM_RBUTTONUP =&H205
私人建筑WM_MBUTTONUP =&H208
私有常量WM_LBUTTONDBLCLK =&H203
私有常量WM_RBUTTONDBLCLK =&H206
私有常量WM_MBUTTONDBLCLK =&H209
私人constant WM_MOUSEWHEEL =&H20A
私人建筑WM_KEYDOWN =&H100
私人建筑WM_KEYUP =&H101
私有常量WM_SYSKEYDOWN =&H104
私有常量WM_SYSKEYUP =&H105
私有常量VK_SHIFT为字节=&H10
私有常量VK_CAPITAL为字节=&H14
私有常量VK_NUMLOCK为字节=&H90
#End Region
事件委托处理#Region“事件委托处理”
将私人事件作为新的System.ComponentModel.EventHandlerList
/ ** /'''鼠标激活事件
作为MouseEventHandler的公共自定义事件MouseActivity
AddHandler(ByVal值为MouseEventHandler)
events.AddHandler(“ MouseActivity”,值)
结束AddHandler
RemoveHandler(ByVal值为MouseEventHandler)
events.RemoveHandler(“ MouseActivity”,值)
结束RemoveHandler
RaiseEvent(ByVal发送者作为对象,ByVal e作为System.Windows.Forms.MouseEventArgs)
将其作为MouseEventHandler = TryCast(事件(“ MouseActivity”),MouseEventHandler)
如果eh不算什么,那么eh. 调用(发送者,e)
结束RaiseEvent
结束事件
/ ** /'''键盘按下事件
公共自定义事件KeyDown作为KeyEventHandler
AddHandler(ByVal值为KeyEventHandler)
events.AddHandler(“ KeyDown”,值)
结束AddHandler
RemoveHandler(ByVal值为KeyEventHandler)
events.RemoveHandler(“ KeyDown”,值)
结束RemoveHandler
RaiseEvent(ByVal发送者作为对象,ByVal e作为System.Windows.Forms.KeyEventArgs)
以KeyEventHandler = TryCast(事件(“ KeyDown”),KeyEventHandler)作为昏暗状态
如果eh不算什么,那么eh. 调用(发送者,e)

结束RaiseEvent
结束事件
/ ** /'''键盘输入事件
公共自定义事件KeyPress作为KeyPressEventHandler
AddHandler(ByVal值为KeyPressEventHandler)
events.AddHandler(“ KeyPress”,值)
结束AddHandler
RemoveHandler(ByVal值为KeyPressEventHandler)
events.RemoveHandler(“ KeyPress”,值)
结束RemoveHandler
RaiseEvent(ByVal发送者为对象,ByVal e为System.Windows.Forms.KeyPressEventArgs)
以KeyPressEventHandler = TryCast(事件(“ KeyPress”),KeyPressEventHandler)的形式定位
如果eh不算什么,那么eh. 调用(发送者鼠标钩子vb,e)
结束RaiseEvent
结束事件
/ ** /'''键盘释放事件
公共自定义事件KeyUp作为KeyEventHandler
AddHandler(ByVal值为KeyEventHandler)
events.AddHandler(“ KeyUp”,值)
结束AddHandler
RemoveHandler(ByVal值为KeyEventHandler)
events.RemoveHandler(“ KeyUp”,值)
结束RemoveHandler
RaiseEvent(ByVal发送者作为对象,ByVal e作为System.Windows.Forms.KeyEventArgs)
以KeyEventHandler = TryCast(事件(“ KeyUp”),KeyEventHandler)的形式消失
如果eh不算什么,那么eh. 调用(发送者,e)
结束RaiseEvent
结束事件
#End Region
将hMouseHook设置为整数
将hKeyboardHook设置为整数
作为HookProc的私人共享MouseHookProcedure
作为HookProc的私人共享KeyboardHookProcedure
创建和销毁类型#Region“创建和销毁类型”
/ ** /'''创建全局鼠标和键盘挂钩(请使用Start方法开始监视)
Sub New()Sub New()
'将其留空
结束子
/ ** /'''创建一个全局的鼠标和键盘挂钩,决定是否安装挂钩
'''
立即获取系统消息
Sub New()Sub New(ByVal InstallAll As Boolean)
如果为InstallAll,则为StartHook(真,真)
结束子
/ ** /'''创建一个全局鼠标和键盘挂钩并确定已安装挂钩的类型
'''
挂钩键盘消息
'''
挂钩鼠标消息

Sub New()Sub New(ByVal InstallKeyboard为布尔值,ByVal InstallMouse为布尔值)
StartHook(InstallKeyboard,InstallMouse)
结束子
/ ** /'''析构函数
受保护的覆盖Sub Finalize()Sub Finalize()
UnHook()'卸载对象时注销系统挂钩
MyBase.Finalize()
结束子
#End Region
/ ** /'''开始安装系统挂钩
'''
挂钩键盘消息
'''
挂钩鼠标消息
公共Sub StartHook()子StartHook(可选的ByVal InstallKeyboardHook为布尔值= True,可选的ByVal InstallMouseHook为Boolean = False)
“注册键盘挂钩
如果InstallKeyboardHook AndAlso hKeyboardHook = 0则
KeyboardHookProcedure =新的HookProc(AddressOf KeyboardHookProc)
hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly.GetModules()(0)),0)
如果hKeyboardHook = 0,则'检测注册是否完成
UnHook(True,False)'在此处注销
抛出新的Win32Exception(Marshal.GetLastWin32Error)'报告错误
如果结束
如果结束
'注册鼠标钩
如果InstallMouseHook并且hMouseHook = 0则
MouseHookProcedure =新的HookProc(AddressOf MouseHookProc)
hMouseHook = SetWindowsHookEx(WH_MOUSE_LL,MouseHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly.GetModules()(0)),0)
如果hMouseHook = 0那么
摘机(False,True)
引发新的Win32Exception(Marshal.GetLastWin32Error)
如果结束
如果结束
结束子
/ ** /'''立即卸载系统挂钩
'''
卸载键盘挂钩
'''
卸载鼠标钩
'''
是否报告错误
公共Sub UnHook()Sub UnHook(可选ByVal UninstallKeyboardHook为布尔值= True,可选ByVal UninstallMouseHook为布尔值= True,可选ByVal ThrowExceptions为布尔值= False)
“卸载键盘挂钩
如果hKeyboardHook 0并且还需要UninstallKeyboardHook然后
将retKeyboard设置为Integer = UnhookWindowsHookEx(hKeyboardHook)
hKeyboardHook = 0
如果ThrowExceptions AndAlso retKeyboard = 0则'如果发生错误,是否报告错误
抛出新的Win32Exception(Marshal.GetLastWin32Error)'报告错误
如果结束

如果结束
'卸载鼠标钩
如果hMouseHook 0并且还需要卸载MouseHook然后
将retMouse设置为整数= UnhookWindowsHookEx(hMouseHook)
hMouseHook = 0
如果ThrowExceptions并且retMouse = 0则
引发新的Win32Exception(Marshal.GetLastWin32Error)
如果结束
如果结束
结束子
'键盘消息的委派处理代码
私有函数KeyboardHookProc()函数KeyboardHookProc(ByVal nCode为整数,ByVal wParam为整数,ByVal lParam为IntPtr)为整数
静态处理为布尔值: 已处理= False
如果nCode> = 0 AndAlso(事件(“ KeyDown”)不是全部,否则ElEl事件(“ KeyPress”)不是全部,否则ElElse事件(“ KeyUp”)不是全部)然后
静态MyKeyboardHookStruct作为KeyboardHookStruct
MyKeyboardHookStruct = DirectCast(Marshal.PtrToStructure(lParam,GetType(KeyboardHookStruct)),KeyboardHookStruct)
“激活KeyDown
如果wParam = WM_KEYDOWN否则,否则wParam = WM_SYSKEYDOWN那么'如果消息是按普通键还是系统键
将其作为新的KeyEventArgs(MyKeyboardHookStruct.vkCode)
RaiseEvent KeyDown(Me,e)'激活事件
handled =已处理或e.Handled'是否取消下一个钩子
如果结束
“激活KeyUp
如果wParam = WM_KEYUP否则,否则wParam = WM_SYSKEYUP然后
将其作为新的KeyEventArgs(MyKeyboardHookStruct.vkCode)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-159875-1.html
千千加油相信自己你最棒