System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及一种虚拟游戏手柄,尤其涉及一种基于hook技术实现dinput虚拟游戏手柄的方法及设备。
技术介绍
1、玩游戏是我们生活中不可缺少的一种娱乐活动,传统玩游戏的方式是通过电脑键盘、鼠标或者物理游戏手柄,游戏手柄是一种常见电子游戏机的部件,通过操纵其按钮等,实现对游戏虚拟角色的控制。但,这些方式既增加了玩游戏的成本,也受空间、位置等条件的局限性。通过虚拟游戏手柄可以完美解决这些问题,使玩游戏变得更简单、更快捷、更实用。
2、目前,通常是通过安装虚拟游戏手柄驱动,以操控虚拟游戏手柄控制应用程序。但是,这种通过安装驱动以操控虚拟设备的方式会产生额外的计算机计算资源的消耗,导致虚拟游戏手柄在运行过程中出现卡顿、受到限制。
技术实现思路
1、本专利技术旨在解决上述问题。
2、本专利技术的主要目的在于提供一种基于hook技术实现dinput虚拟游戏手柄的方法。
3、本专利技术的另一目的在于提供一种基于hook技术实现dinput虚拟游戏手柄的设备。
4、为达到上述目的,本专利技术的技术方案具体是这样实现的:
5、本专利技术一方面提供了一种基于hook技术实现dinput虚拟游戏手柄的方法,所述方法包括:
6、通过hook获取虚拟游戏手柄设备输入数据的dinput调用函数的控制权;
7、根据所述控制权拦截所述虚拟游戏手柄设备输入数据的dinput调用函数,从虚拟游戏手柄数据队列的最前端开始获取所述虚拟
8、和/或,
9、通过hook获取虚拟游戏手柄设备状态数据的dinput调用函数的控制权;
10、根据所述控制权拦截所述虚拟游戏手柄设备状态数据的dinput调用函数,获取虚拟游戏手柄设备状态数据的数据包,其中,所述虚拟游戏手柄设备状态数据的数据包,包括:各个虚拟游戏手柄设备对应的全部手柄设备组件的键值对应的偏移量以及对应的操作状态和时间戳。
11、可选的,所述通过hook获取虚拟游戏手柄设备输入数据的dinput调用函数的控制权,和或通过hook获取虚拟游戏手柄设备状态数据的dinput调用函数的控制权之前,所述方法还包括:
12、通过hook挂钩dinput创建函数,在所述dinput创建函数被调用时,获取返回值的句柄和接口指针;
13、根据所述返回值的句柄和接口指针,枚举多个虚拟游戏手柄设备,将每个所述虚拟游戏手柄设备的guid添加到设备列表中;
14、创建所述虚拟游戏手柄设备的设备对象并完成注册,将每个所述虚拟游戏手柄设备的设备序号添加到所述设备列表中。
15、可选的,所述方法还包括:
16、在所述虚拟游戏手柄设备输入数据的dinput调用函数没有被调用时,所述虚拟游戏手柄数据队列停止使用;
17、在所述虚拟游戏手柄设备输入数据的dinput调用函数被调用时,按照手柄设备组件被操作的时序依次获取所述虚拟游戏手柄设备被操作的手柄设备组件的键值、操作状态以及时间戳,并将所述被操作的手柄设备组件的键值对应的偏移量、操作状态以及时间戳以预设的数据格式生成所述输入数据的数据包按照所述时序依次存放到所述虚拟游戏手柄数据队列中。
18、可选的,所述从虚拟游戏手柄数据队列的最前端开始获取所述虚拟游戏手柄设备的输入数据的数据包,包括:在所述虚拟游戏手柄设备输入数据的dinput调用函数被调用时,拦截系统人体学接口设备hid函数和/或setupapi函数,当所述hid函数和/或所述setupapi函数拦截到预设的手柄句柄时,获取与所述预设的手柄句柄对应的虚拟游戏手柄设备的输入数据的数据包;所述获取虚拟游戏手柄设备的状态数据的数据包,包括:在所述虚拟游戏手柄设备状态数据的dinput调用函数被调用时,拦截所述系统人体学接口设备hid函数和/或所述setupapi函数,当所述hid函数和/或所述setupapi函数拦截到所述预设的手柄句柄时,获取与所述预设的手柄句柄对应的虚拟游戏手柄设备的状态数据的数据包。
19、可选的,所述预设的数据格式包括默认的数据格式和自定义的数据格式;在所述创建所述虚拟游戏手柄设备的设备对象并完成注册,将每个所述虚拟游戏手柄设备的设备序号添加到所述设备列表中之后,所述方法还包括:
20、通过setdataformat方法拦截所述自定义的数据格式的数据块,将所述自定义的数据格式的数据块解析出所述自定义的数据格式,建立源数据和所述自定义的数据格式的存储地址的数据映射,根据所述自定义的数据格式解析出数据存储地址的偏移量,将所述数据存储地址的偏移量和所述虚拟游戏手柄设备的手柄设备组件的键值进行关系映射。
21、本专利技术另一方面提供了一种基于hook技术实现dinput虚拟游戏手柄的设备,包括:
22、钩子模块,用于通过hook获取虚拟游戏手柄设备输入数据的dinput调用函数的控制权;和/或,通过hook获取虚拟游戏手柄设备状态数据的dinput调用函数的控制权;
23、数据调用模块,根据所述控制权拦截所述虚拟游戏手柄设备输入数据的dinput调用函数,从虚拟游戏手柄数据队列的最前端开始获取所述虚拟游戏手柄设备的输入数据的数据包,其中,所述虚拟游戏手柄设备的输入数据的数据包包括:当前被操作的手柄设备组件的键值对应的偏移量以及对应的操作状态和时间戳;和/或,根据所述控制权拦截所述虚拟游戏手柄设备状态数据的dinput调用函数,获取虚拟游戏手柄设备状态数据的数据包,其中,所述虚拟游戏手柄设备状态数据的数据包,包括:各个虚拟游戏手柄设备对应的全部手柄设备组件的键值对应的偏移量以及对应的操作状态和时间戳。
24、可选的,该设备还包括:数据处理模块,其中:
25、所述数据处理模块,用于通过hook挂钩dinput创建函数,在所述dinput创建函数被调用时,获取返回值的句柄和接口指针;根据所述返回值的句柄和接口指针,枚举多个虚拟游戏手柄设备,将每个所述虚拟游戏手柄设备的guid添加到设备列表中;创建所述虚拟游戏手柄设备的设备对象并完成注册,将每个所述虚拟游戏手柄设备的设备序号添加到所述设备列表中。
26、可选的,所述数据处理模块,还用于:
27、在所述虚拟游戏手柄设备输入数据的dinput调用函数没有被调用时,停止使用所述虚拟游戏手柄数据队列;
28、在所述虚拟游戏手柄设备输入数据的dinput调用函数被调用时,按照手柄设备组件被操作的时序依次获取所述虚拟游戏手柄设备被操作的手柄设备组件的键值、操作状态以及时间戳,并将所述被操作的手柄设备组件的键值对应的偏移量、操作状态以及时间戳以预设的数据格式生成所述输入数据的数据包按照所述时序依次存放到所述虚拟游戏手柄数据队列中。本文档来自技高网...
【技术保护点】
1.一种基于HOOK技术实现Dinput虚拟游戏手柄的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述通过HOOK获取虚拟游戏手柄设备输入数据的Dinput调用函数的控制权,和或通过HOOK获取虚拟游戏手柄设备状态数据的Dinput调用函数的控制权之前,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
4.根据权利要求3所述的方法,其特征在于,
5.根据权利要求3所述的方法,其特征在于,
6.一种基于HOOK技术实现Dinput虚拟游戏手柄的设备,其特征在于,包括:
7.根据权利要求6所述的基于HOOK技术实现Dinput虚拟游戏手柄的设备,其特征在于,还包括:数据处理模块,其中:
8.根据权利要求7所述的基于HOOK技术实现Dinput虚拟游戏手柄的设备,其特征在于,
9.根据权利要求8所述的基于HOOK技术实现Dinput虚拟游戏手柄的设备,其特征在于,
10.根据权利要求8所述的基于HOOK技术实现Dinpu
...【技术特征摘要】
1.一种基于hook技术实现dinput虚拟游戏手柄的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述通过hook获取虚拟游戏手柄设备输入数据的dinput调用函数的控制权,和或通过hook获取虚拟游戏手柄设备状态数据的dinput调用函数的控制权之前,所述方法还包括:
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
4.根据权利要求3所述的方法,其特征在于,
5.根据权利要求3所述的方法,其特征在于,
6...
【专利技术属性】
技术研发人员:黄本良,
申请(专利权)人:北京蔚领时代科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。