vb.net 如何调用全局鼠标钩子,求一个实例!!!

问题描述

vb.net如何调用全局鼠标钩子,求一个实例!!!

解决方案

解决方案二:
以前收藏的全局键盘鼠标勾子。太多删了一点,鼠标的保留下来了ImportsSystem.Reflection,System.Threading,System.ComponentModel,System.Runtime.InteropServicesPublicClasshook#Region"定义结构"PrivateStructureMouseHookStructDimPTAsPointDimHwndAsIntegerDimWHitTestCodeAsIntegerDimDwExtraInfoAsIntegerEndStructurePrivateStructureMouseLLHookStructDimPTAsPointDimMouseDataAsIntegerDimFlagsAsIntegerDimTimeAsIntegerDimDwExtraInfoAsIntegerEndStructurePrivateStructureKeyboardHookStructDimvkCodeAsIntegerDimScanCodeAsIntegerDimFlagsAsIntegerDimTimeAsIntegerDimDwExtraInfoAsIntegerEndStructure#EndRegion#Region"API声明导入"PrivateDeclareFunctionSetWindowsHookExALib"user32"(ByValidHookAsInteger,ByVallpfnAsHookProc,ByValhModAsIntPtr,ByValdwThreadIdAsInteger)AsIntegerPrivateDeclareFunctionUnhookWindowsHookExLib"user32"(ByValidHookAsInteger)AsIntegerPrivateDeclareFunctionCallNextHookExLib"user32"(ByValidHookAsInteger,ByValnCodeAsInteger,ByValwParamAsInteger,ByVallParamAsIntPtr)AsIntegerPrivateDeclareFunctionToAsciiLib"user32"(ByValuVirtKeyAsInteger,ByValuScancodeAsInteger,ByVallpdKeyStateAsByte(),ByVallpwTransKeyAsByte(),ByValfuStateAsInteger)AsIntegerPrivateDeclareFunctionGetKeyboardStateLib"user32"(ByValpbKeyStateAsByte())AsIntegerPrivateDeclareFunctionGetKeyStateLib"user32"(ByValvKeyAsInteger)AsShortPrivateDelegateFunctionHookProc(ByValnCodeAsInteger,ByValwParamAsInteger,ByVallParamAsIntPtr)AsInteger#EndRegion#Region"常量声明"PrivateConstWH_MOUSE_LL=14PrivateConstWH_KEYBOARD_LL=13PrivateConstWH_MOUSE=7PrivateConstWH_KEYBOARD=2PrivateConstWM_MOUSEMOVE=&H200PrivateConstWM_LBUTTONDOWN=&H201PrivateConstWM_RBUTTONDOWN=&H204PrivateConstWM_MBUTTONDOWN=&H207PrivateConstWM_LBUTTONUP=&H202PrivateConstWM_RBUTTONUP=&H205PrivateConstWM_MBUTTONUP=&H208PrivateConstWM_LBUTTONDBLCLK=&H203PrivateConstWM_RBUTTONDBLCLK=&H206PrivateConstWM_MBUTTONDBLCLK=&H209PrivateConstWM_MOUSEWHEEL=&H20APrivateConstWM_KEYDOWN=&H100PrivateConstWM_KEYUP=&H101PrivateConstWM_SYSKEYDOWN=&H104PrivateConstWM_SYSKEYUP=&H105PrivateConstVK_SHIFTAsByte=&H10PrivateConstVK_CAPITALAsByte=&H14PrivateConstVK_NUMLOCKAsByte=&H90#EndRegion'''<summary>鼠标激活事件</summary>PublicEventMouseActivityAsMouseEventHandler'''<summary>键盘按下事件</summary>PublicEventKeyDownAsKeyEventHandler'''<summary>键盘输入事件</summary>PublicEventKeyPressAsKeyPressEventHandler'''<summary>键盘松开事件</summary>PublicEventKeyUpAsKeyEventHandlerPrivatehMouseHookAsIntegerPrivatehKeyboardHookAsIntegerPrivateSharedMouseHookProcedureAsHookProcPrivateSharedKeyboardHookProcedureAsHookProc'''<summary>创建一个全局鼠标键盘钩子(请使用Start方法开始监视)</summary>SubNew()'留空即可EndSub'''<summary>创建一个全局鼠标键盘钩子,决定是否安装钩子</summary>'''<paramname="InstallAll">是否立刻挂钩系统消息</param>SubNew(ByValInstallAllAsBoolean)IfInstallAllThenStartHook(True,True)EndSub'''<summary>创建一个全局鼠标键盘钩子,并决定安装钩子的类型</summary>'''<paramname="InstallKeyboard">挂钩键盘消息</param>'''<paramname="InstallMouse">挂钩鼠标消息</param>SubNew(ByValInstallKeyboardAsBoolean,ByValInstallMouseAsBoolean)StartHook(InstallKeyboard,InstallMouse)EndSub'''<summary>析构函数</summary>ProtectedOverridesSubFinalize()UnHook()'卸载对象时反注册系统钩子MyBase.Finalize()EndSub'''<summary>开始安装系统钩子</summary>'''<paramname="InstallKeyboardHook">挂钩键盘消息</param>'''<paramname="InstallMouseHook">挂钩鼠标消息</param>PublicSubStartHook(OptionalByValInstallKeyboardHookAsBoolean=True,OptionalByValInstallMouseHookAsBoolean=False)'注册键盘钩子IfInstallKeyboardHookAndAlsohKeyboardHook=0ThenKeyboardHookProcedure=NewHookProc(AddressOfKeyboardHookProc)hKeyboardHook=SetWindowsHookExA(WH_KEYBOARD_LL,KeyboardHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly.GetModules()(0)),0)IfhKeyboardHook=0Then'检测是否注册完成UnHook(True,False)'在这里反注册ThrowNewWin32Exception(Marshal.GetLastWin32Error)'报告错误EndIfEndIf'注册鼠标钩子IfInstallMouseHookAndAlsohMouseHook=0ThenMouseHookProcedure=NewHookProc(AddressOfMouseHookProc)hMouseHook=SetWindowsHookExA(WH_MOUSE_LL,MouseHookProcedure,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly.GetModules()(0)),0)IfhMouseHook=0ThenUnHook(False,True)ThrowNewWin32Exception(Marshal.GetLastWin32Error)EndIfEndIfEndSub'''<summary>立刻卸载系统钩子</summary>'''<paramname="UninstallKeyboardHook">卸载键盘钩子</param>'''<paramname="UninstallMouseHook">卸载鼠标钩子</param>'''<paramname="ThrowExceptions">是否报告错误</param>PublicSubUnHook(OptionalByValUninstallKeyboardHookAsBoolean=True,OptionalByValUninstallMouseHookAsBoolean=True,OptionalByValThrowExceptionsAsBoolean=False)'卸载键盘钩子IfhKeyboardHook<>0AndAlsoUninstallKeyboardHookThenDimretKeyboardAsInteger=UnhookWindowsHookEx(hKeyboardHook)hKeyboardHook=0IfThrowExceptionsAndAlsoretKeyboard=0Then'如果出现错误,是否报告错误ThrowNewWin32Exception(Marshal.GetLastWin32Error)'报告错误EndIfEndIf'卸载鼠标钩子IfhMouseHook<>0AndAlsoUninstallMouseHookThenDimretMouseAsInteger=UnhookWindowsHookEx(hMouseHook)hMouseHook=0IfThrowExceptionsAndAlsoretMouse=0ThenThrowNewWin32Exception(Marshal.GetLastWin32Error)EndIfEndIfEndSub'鼠标消息的委托处理代码PrivateFunctionMouseHookProc(ByValnCodeAsInteger,ByValwParamAsInteger,ByVallParamAsIntPtr)AsIntegerIfnCode>=0ThenDimmouseHookStructAsMouseLLHookStruct=DirectCast(Marshal.PtrToStructure(lParam,GetType(MouseLLHookStruct)),MouseLLHookStruct)DimmoubutAsMouseButtons=MouseButtons.None'鼠标按键DimmouseDeltaAsInteger=0'滚轮值SelectCasewParamCaseWM_LBUTTONDOWNmoubut=MouseButtons.LeftCaseWM_RBUTTONDOWNmoubut=MouseButtons.RightCaseWM_MBUTTONDOWNmoubut=MouseButtons.MiddleCaseWM_MOUSEWHEELDimintAsInteger=(mouseHookStruct.MouseData>>16)And&HFFFF'本段代码CLE添加,模仿C#的Short从Int弃位转换Ifint>Short.MaxValueThenmouseDelta=int-65536ElsemouseDelta=intEndSelectDimclickCountAsInteger=0'单击次数Ifmoubut<>MouseButtons.NoneThenIfwParam=WM_LBUTTONDBLCLKOrElsewParam=WM_RBUTTONDBLCLKOrElsewParam=WM_MBUTTONDBLCLKThenclickCount=2ElseclickCount=1EndIfEndIfDimeAsNewMouseEventArgs(moubut,clickCount,mouseHookStruct.PT.X,mouseHookStruct.PT.Y,mouseDelta)RaiseEventMouseActivity(Me,e)EndIfReturnCallNextHookEx(hMouseHook,nCode,wParam,lParam)'激活下一个钩子EndFunction'''<summary>键盘钩子是否有效</summary>PublicPropertyKeyHookEnabled()AsBooleanGetReturnhKeyboardHook<>0EndGetSet(ByValvalueAsBoolean)IfvalueThenStartHook(True,False)ElseUnHook(True,False)EndSetEndProperty'''<summary>鼠标钩子是否有效</summary>PublicPropertyMouseHookEnabled()AsBooleanGetReturnhMouseHook<>0EndGetSet(ByValvalueAsBoolean)IfvalueThenStartHook(False,True)ElseUnHook(False,True)EndSetEndPropertyEndClass

时间: 2024-10-05 16:54:02

vb.net 如何调用全局鼠标钩子,求一个实例!!!的相关文章

mfc-关于鼠标钩子如何捕获滚轮上下的消息

问题描述 关于鼠标钩子如何捕获滚轮上下的消息 想要弄一个全局鼠标钩子WM_MOUSE_LL,改变滚轮的功能,如何判断鼠标滚轮是向上还是向下呢?? 解决方案 Win32 鼠标消息 - 客户区鼠标消息.非客户区鼠标消息.击中测试.鼠标滚轮 解决方案二: 下钩子,捕获滚轮消息

vb.net 全局键盘钩子?

问题描述 这段键盘钩子,在窗口里怎么调用啊?ImportsSystem.Reflection,System.Threading,System.ComponentModel,System.Runtime.InteropServices'''<summary>本类可以在.NET环境下使用系统键盘与鼠标钩子</summary>PublicClassSystemHook定义结构API声明导入常量声明事件委托处理PrivatehMouseHookAsIntegerPrivatehKeyboa

环境配置-vb代码,调用水晶报表,一闪就没了

问题描述 vb代码,调用水晶报表,一闪就没了 vb代码,使用.printReport调用水晶报表.rpt文件打开报表,但是一闪就没有了,代码也没有报出任何错误.另外,代码没有问题,因为在另一台电脑上正常显示了报表内容.我想应该是水晶报表的环境配置问题,具体是什么配置没用达成,才出现这种现象.需要进行怎样的配置或者什么,是这台电脑也能够正常显示报表内容.求高手们指点迷津.谢谢啦!

自己设置了一个鼠标钩子,然后点击获取窗口坐标,但是坐标不对。

问题描述 自己设置了一个鼠标钩子,然后点击获取窗口坐标,但是坐标不对. 自己设置了一个全局的鼠标钩子,然后触发点击获取窗口坐标,当点击在窗口外的时候,获取到窗口坐标是对的,但是点击在窗口里面的时候,获取的到的窗口坐标就不对了,好像是0,0.不知道什么原因,该怎么解决这个问题? 解决方案 获取鼠标点击的坐标处理 解决方案二: 刚才尝试过,我直接把窗口坐标设置成全局变量,也不点击一次获取一次了,然后再尝试,问题依旧.那么说,点击窗口外,是正常的,点击窗口内,获取的坐标就变成了零.这是为什么?

VB.NET 如何调用明基扫描仪

问题描述 求一个调用明基扫描仪进行拍照,存档的VB.NET的例子. 解决方案 本帖最后由 wx9288 于 2016-06-19 23:17:20 编辑解决方案二:可以试下.net下的twain插件,我最近也在做佳能扫描仪解决方案三: 解决方案四:楼上方法确实可行.我觉得明基扫描仪本身带有扫描软件,可以尝试调用它的软件的控件,这样可以用到它最佳功能.解决方案五:mark,testrenqi

源码 矢量图-VB 矢量图简单源码 跪求

问题描述 VB 矢量图简单源码 跪求 最近想做一个小软件,需要用到矢量图,奈何没接触过,不知道数据存放结构如何设置,以及图形放大缩小后如何重写,跪求大神指教,最好给出简单源码,不胜感激!! 解决方案 直接用wmf格式就可以了.Image.PictureBox可以直接显示.缩放.用CorelDraw可以编辑 解决方案二: 直接用wmf格式就可以了.Image.PictureBox可以直接显示.缩放.

vb.net如何调用Hook

本文不是讲解Hook原理的文章,仅是讨论一下在vb.net如何调用Hook功能,以及vb.net中API使用的变化问题.由于Hook种类较多,本文中以最常用的键盘Hook为例进行分析.一.先来看一下在vb中是如何实现的.截的是空格键.表现的目标是:一个form,上面有一个textbox,不管焦点是否落在textbox里,按空格键,不会在textbox中输入一个空格,而是变成在textbox中写入一句话:"HOOK成功!"1.在一个Module中写入下列代码:调用的API的申明:Decl

在VB组件内调用Excel2000实现GIF饼图

excel|饼图 当我第一次使用excel的时候,就为excel的图表功能所倾倒,实在强大,并且那些图也挺漂亮了 .后来我尝试着在vb里面调用excel所支持的vba功能,发现功能的确强大,就是十分繁琐.后来就考虑用vb在excel外面包一层,写成对象,去掉我们不需要的特性.这样掉用起来就方便多了,所谓一劳永逸 :P. 在这里,我将像大家介绍一个用vb编写的饼图组件,你只需要给它几个简单的参数,就可以生成一副GIF格式的图片给你.调用例子如下: Dim objSet obj = CreateOb

求一个接口能使js直接调用到ios开发里面的方法

问题描述 求一个接口能使js直接调用到ios开发里面的方法 求一个接口能使js直接调用到ios开发里面的方法,就是js里面连接一个接口,能直接调用ios里面的函数,进行数据的交互 解决方案 参考iOS中JavaScript和OC交互