一种键鼠输入方法、装置、设备及介质
文献发布时间:2023-06-19 09:44:49
技术领域
本发明涉及游戏服务技术领域,特别涉及一种键鼠输入方法、装置、设备及介质。
背景技术
云游戏是以云计算为基础的游戏方式,在云游戏的运行模式下,所有的游戏进程都会在云主机上运行。其中,云主机负责利用CPU(Central Processing Unit,中央处理器)和GPU(Graphics Processing Unit,图形处理器)渲染出逼真的游戏画面,然后,将云主机显示的画面进行压缩,并通过网络传输给用户。在此情况下,用户只需要拥有一台具备基本视频解压能力的设备,就可以流畅的体验各类需要高性能硬件支撑的游戏。
由于用户会根据云主机的硬件规格来选择云游戏的服务商,因此,云游戏服务商通常会采购高性能的计算机作为云主机,以增强自身云游戏服务的竞争力。在实际应用中,可能有部分用户想玩的游戏并不需要配置性能太高的计算机,此时,为了充分发挥云主机的全部性能,就可以在一台云主机上运行多个游戏来为多个用户提供硬件共享资源。但是,在目前的云游戏应用场景中,在云主机上通常会通过虚拟键鼠驱动来创建一套虚拟的键鼠操作。在此设置方式下,用户A与用户B之间的键鼠操作就会产生相互影响与干扰,并由此导致用户在一个共享云主机上玩游戏时无法做到独享式的游戏体验。目前,针对这一技术问题,还没有较为有效的解决办法。
由此可见,如何让多个用户在使用同一台云主机时不会对其它用户的键鼠操作产生影响与干扰,并使得每一个用户都可以获得独享式的游戏体验,是本领域技术人员亟待解决的技术问题。
发明内容
有鉴于此,本发明的目的在于提供一种键鼠输入方法、装置、设备及介质,以让多个用户在使用同一台云主机时不会对其它用户的键鼠操作产生影响与干扰,并使得每一个用户都可以获得独享式的游戏体验。其具体方案如下:
一种键鼠输入方法,应用于云主机,包括:
当与目标用户建立连接时,则控制客户端捕获所述目标用户执行键鼠操作的键鼠操作信息,并将所述键鼠操作信息发送至服务端;
当所述服务端接收到所述键鼠操作信息时,则利用所述云主机自身的驱动器获取所述键鼠操作信息;
当所述驱动器获取到所述键鼠操作信息时,则根据所述键鼠操作信息确定所述目标用户执行所述键鼠操作信息的目标进程,并调用目标API对所述目标进程模拟键鼠输入操作;其中,所述目标API为预先从所述云主机内核中所获取的与键鼠操作相关的应用程序接口。
优选的,所述根据所述键鼠操作信息确定所述目标用户执行所述键鼠操作信息的目标进程的过程,包括:
利用所述键鼠操作信息确定所述目标用户执行所述键鼠操作信息的进程ID和/或窗口句柄;
若所述进程ID和/或所述窗口句柄有效,则根据所述进程ID和/或所述窗口句柄确定所述目标用户执行所述键鼠操作信息的所述目标进程。
优选的,所述调用目标API对所述目标进程模拟键鼠输入操作的过程,包括:
调用Allocate Hid data申请Raw Input的目标内存,并将所述键鼠操作信息填充至所述目标内存,得到填充Raw Input;
利用Post Input Message对所述填充Raw Input进行激活,以利用所述填充RawInput将所述键鼠操作信息传输至所述驱动器;
判断所述键鼠操作信息是否传输成功;
若是,则判定对所述目标进程完成所述键鼠输入操作的模拟。
优选的,所述判断所述键鼠操作信息是否传输成功的过程之后,还包括:
若否,则利用Free Hid Data释放所述填充Raw Input中的内存。
优选的,还包括:
利用Windows窗口管理器为所述目标用户创建JobObject,并将所述目标进程绑定至所述JobObject。
优选的,还包括:
控制所述Windows窗口管理器通过所述JobObject枚举所述目标用户在当前时刻和目标时刻所打开的第一窗口和第二窗口;其中,所述目标时刻为所述当前时刻的前预设时间;
根据所述第一窗口和所述第二窗口确定所述目标用户新打开的目标窗口,并判断所述目标窗口是否在所述客户端的显示器进行显示;
若否,则调用Set Window Placement将所述目标窗口移动至所述云主机的主控显示器。
优选的,所述获取所述目标用户执行键鼠操作的键鼠操作信息的过程之后,还包括:
判断所述目标用户执行所述键鼠操作的窗口是否属于所述JobObject;
若是,则将所述键鼠操作信息发送至所述驱动器,以使所述驱动器根据所述键鼠操作信息确定所述目标用户执行所述键鼠操作信息的所述目标进程,并调用所述目标API对所述目标进程模拟所述键鼠输入操作;
若否,则丢弃所述键鼠操作信息。
相应的,本发明还公开了一种键鼠输入装置,应用于云主机,包括:
用户连接模块,用于当与目标用户建立连接时,则控制客户端捕获所述目标用户执行键鼠操作的键鼠操作信息,并将所述键鼠操作信息发送至服务端;
信息获取模块,用于当所述服务端接收到所述键鼠操作信息时,则利用所述云主机自身的驱动器获取所述键鼠操作信息;
操作模拟模块,用于当所述驱动器获取到所述键鼠操作信息时,则根据所述键鼠操作信息确定所述目标用户执行所述键鼠操作信息的目标进程,并调用目标API对所述目标进程模拟键鼠输入操作;其中,所述目标API为预先从所述云主机内核中所获取的与键鼠操作相关的应用程序接口。
相应的,本发明还公开了一种键鼠输入设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如前述所公开的一种键鼠输入方法的步骤。
相应的,本发明还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如前述所公开的一种键鼠输入方法的步骤。
可见,在本发明所提供的键鼠输入方法中,首先是预先从云主机内核中获取与键鼠操作相关的目标API,当云主机与目标用户建立连接时,则控制客户端捕获目标用户执行键鼠操作的键鼠操作信息,并将键鼠操作信息发送至服务端,当服务端接收到客户端所捕获到的键鼠操作信息时,云主机则会通过自身的驱动器获取键鼠操作信息;当驱动器获取到键鼠操作信息时,云主机会根据键鼠操作信息来确定目标用户执行键鼠操作信息的目标进程,并会调用目标API对目标进程进行键鼠输入操作的模拟。显然,在该方法中,因为云主机是通过调用目标API来对用户执行键鼠操作的目标进程进行键鼠输入操作的模拟,这样就相当于是以进程为单位来模拟用户的键鼠操作,所以,通过这样的设置方式就可以让多个用户在使用同一台云主机时不会对其它用户的键鼠操作产生影响与干扰,并由此使得每一个用户都可以获得独享式的游戏体验。相应的,本发明所提供的一种键鼠输入装置、设备及介质,同样具有上述有益效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例所提供的一种键鼠输入方法的流程图;
图2为本发明实施例所提供的一种实现隔离键鼠输入的调用示意图;
图3为本发明实施例所提供的目标用户创建用户会话与窗口操作权限管理之间的示意图;
图4为本发明实施例所提供的一种键鼠输入装置的结构图;
图5为本发明实施例所提供的一种键鼠输入设备的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,图1为本发明实施例所提供的一种键鼠输入方法的流程图,该键鼠输入方法包括:
步骤S11:当与目标用户建立连接时,则控制客户端捕获目标用户执行键鼠操作的键鼠操作信息,并将键鼠操作信息发送至服务端;
步骤S12:当服务端接收到键鼠操作信息时,则利用云主机自身的驱动器获取键鼠操作信息;
步骤S13:当驱动器获取到键鼠操作信息时,则根据键鼠操作信息确定目标用户执行键鼠操作信息的目标进程,并调用目标API对目标进程模拟键鼠输入操作;
其中,目标API为预先从云主机内核中所获取的与键鼠操作相关的应用程序接口。
在本实施例中,是提供了一种键鼠输入方法,通过该方法可以让多个用户在使用同一台云主机时不会对其它用户的键鼠操作产生影响与干扰,并使得每一个用户都可以获得独享式的游戏体验。在该键鼠输入方法中,是以云主机为执行主体进行说明。
具体的,在该键鼠输入方法中,云主机首先是预先从云主机内核中获取与键鼠操作相关的目标API(Application Programming Interface,应用程序接口)。其中,目标API包括:Allocate Hid data、Post Input Message、Free Hid Data、Validata Hwnd、xxxSendTransformable Message Timeout和Post transformable Message Extended等等。
当目标用户想要在云主机上玩游戏时,目标用户首先会与云主机连接通信连接,当云主机与目标用户建立连接时,云主机首先是控制客户端捕获目标用户执行键鼠操作的键鼠操作信息,并将获取到的键鼠操作信息发送至服务端;然后,通过服务端将目标用户执行键鼠操作的键鼠操作信息发送至云主机的驱动器,当驱动器接收到服务端所发送的键鼠操作信息时,会根据键鼠操作信息来确定目标用户在执行键鼠操作信息时的目标进程,当云主机确定出目标用户在执行键鼠操作信息时的目标进程时,云主机会调用目标API对目标进程模拟键鼠输入操作。
可以理解的是,因为云主机是通过调用目标API来对用户执行键鼠操作的目标进程进行键鼠输入操作的模拟,这样就相当于是以进程为单位来模拟用户的键鼠操作,所以,通过这样的设置方式就可以让多个用户在使用同一台云主机时不会对其它用户的键鼠操作产生影响与干扰,并由此使得每一个用户都可以获得独享式的游戏体验。
可见,在本实施例所提供的键鼠输入方法中,首先是预先从云主机内核中获取与键鼠操作相关的目标API,当云主机与目标用户建立连接时,则控制客户端捕获目标用户执行键鼠操作的键鼠操作信息,并将键鼠操作信息发送至服务端,当服务端接收到客户端所捕获到的键鼠操作信息时,云主机则会通过自身的驱动器获取键鼠操作信息;当驱动器获取到键鼠操作信息时,云主机会根据键鼠操作信息来确定目标用户执行键鼠操作信息的目标进程,并会调用目标API对目标进程进行键鼠输入操作的模拟。显然,在该方法中,因为云主机是通过调用目标API来对用户执行键鼠操作的目标进程进行键鼠输入操作的模拟,这样就相当于是以进程为单位来模拟用户的键鼠操作,所以,通过这样的设置方式就可以让多个用户在使用同一台云主机时不会对其它用户的键鼠操作产生影响与干扰,并由此使得每一个用户都可以获得独享式的游戏体验。
基于上述实施例,本实施例对技术方案作进一步的说明与优化,作为一种优选的实施方式,上述步骤:根据键鼠操作信息确定目标用户执行键鼠操作信息的目标进程的过程,包括:
利用键鼠操作信息确定目标用户执行键鼠操作信息的进程ID和/或窗口句柄;
若进程ID和/或窗口句柄有效,则根据进程ID和/或窗口句柄确定目标用户执行键鼠操作信息的目标进程。
在本实施例中,是提供了一种确定目标用户执行键鼠操作信息的目标进程的具体实施方式,也即,在确定目标进程的过程中,首先是利用键鼠操作信息确定目标用户执行键鼠操作的进程ID和/或窗口句柄。
可以理解的是,因为进程ID是当进程被创建时所分配的一个地址,操作系统就是通过进程ID来对对应的进程进行操作,而窗口句柄是当进程被创建时所赋予的一个数据结构体,在该数据结构体中记载着该进程的各种操作信息,比如:窗口大小、移动窗口、关闭窗口等等,所以,当获取得到目标用户在执行键鼠操作的进程ID和/或窗口句柄时,就可以根据进程ID和/或窗口句柄确定出目标用户在执行键鼠操作信息时的目标进程。
另外,在本实施例中,为了避免出现进程ID和/或窗口句柄无效而使得后续流程无法继续执行的情形,还在获取得到进程ID和/或窗口句柄之后,又进一步判断了进程ID和/或窗口句柄是否有效,也即,只有在进程ID和/或窗口句柄有效的前提下,云主机才能根据进程ID和/或窗口句柄确定目标用户执行键鼠操作信息的目标进程。
显然,通过本实施例所提供的技术方案,可以保证在确定目标进程时的准确性。
基于上述实施例,本实施例对技术方案作进一步的说明与优化,作为一种优选的实施方式,上述步骤:调用目标API对目标进程模拟键鼠输入操作的过程,包括:
调用Allocate Hid data申请Raw Input的目标内存,并将键鼠操作信息填充至目标内存,得到填充Raw Input;
利用Post Input Message对填充Raw Input进行激活,以利用填充Raw Input将键鼠操作信息传输至驱动器;
判断键鼠操作信息是否传输成功;
若是,则判定对目标进程完成键鼠输入操作的模拟。
在本实施例中,在对目标进程进行键鼠操作模拟时,首先是调用Allocate Hiddata申请Raw Input的目标内存,并将键鼠操作信息填充至目标内存,得到填充Raw Input,其中,对目标内存进行填充的目的是因为目标内存中的参数才是Post Input Message的参数,所以,需要将键鼠操作信息填充至目标内存。
然后,再利用利用Post Input Message对填充Raw Input进行激活,以利用填充Raw Input将键鼠操作信息传输至驱动器,如果键鼠操作信息能够成功传输至云主机中的驱动器,则说明填充Raw Input中的内存由应用层传输到了驱动层,也即,云主机完成了对目标进程的键鼠操作模拟。
作为一种优选的实施方式,判断键鼠操作信息是否传输成功的过程之后,还包括:
若否,则利用Free Hid Data释放填充Raw Input中的内存。
在实际应用中,如果键鼠操作信息没有成功传输至驱动器,则说明云主机没有完成对目标进程的键鼠操作模拟,此时,为了避免Raw Input中的内存占用云主机的资源开销,此时,还可以利用利用Free Hid Data将填充Raw Input中的内存释放掉,由此就可以提高云主机的执行效率。
请参见图2,图2为本发明实施例所提供的一种实现隔离键鼠输入的调用示意图。当客户端捕获到目标用户在执行键鼠操作时的键鼠操作信息时,客户端会通过网络将键鼠操作信息传输至服务端,服务端再调用窗口管理程序的接口,构造包含进程ID、窗口句柄以及RawInput的内部结构体,并调用驱动接口,通过进程ID和窗口句柄获取目标API所需要的参数,在此过程中,云主机会根据键鼠操作信息判断目标用户到底是执行了键盘操作还是鼠标操作,如果是键盘操作,则构造键盘RawInput的结构体,如果是鼠标操作,则构造鼠标RawInput的结构体;之后调用Allocate Hid data申请结构体所需要的目标内存,并使用构造好的结构体来填充目标内存,得到填充RawInput,之后,调用Post Input Message来对填充RawInput进行激活,并利用填充RawInput将键鼠操作信息传输至驱动器,以判断是否对目标API调用成功,如果调用成功,则完成一次以进程为单位的隔离键鼠输入,如果调用不成功,则调用Free Hid Data释放填充Raw Input中的内存。
显然,通过本实施例所提供的技术方案,可以进一步保证在对目标进程进行键鼠操作模拟时的可靠性。
基于上述实施例,本实施例对技术方案作进一步的说明与优化,作为一种优选的实施方式,上述键鼠输入方法还包括:
利用Windows窗口管理器为目标用户创建JobObject,并将目标进程绑定至JobObject。
可以理解的是,因为JobObject是Windows窗口管理器所提供的一种管理进程的方式,且JobObject允许一组进程被当作一个单元进行管理,所以,在本实施例中,是在确定出目标进程之后,又利用Windows窗口管理器为目标用户创建了JobObject,并将目标进程绑定到JobObject当中。
能够想到的是,当将目标进程绑定至JobObject时,目标进程所创建的各个子进程都会自动地添加至JobObject,在此情况下,Windows窗口管理器就会通过JobObject枚举目标用户打开的所有窗口,并对打开的窗口进行管理与调用。
显然,通过本实施例所提供的技术方案,就可以进一步提高在对目标用户创建进程管理过程中的管理效率。
作为一种优选的实施方式,还包括:
控制Windows窗口管理器通过JobObject枚举目标用户在当前时刻和目标时刻所打开的第一窗口和第二窗口;
其中,目标时刻为当前时刻的前预设时间;
根据第一窗口和第二窗口确定目标用户新打开的目标窗口,并判断目标窗口是否在客户端的显示器进行显示;
若否,则调用Set Window Placement将目标窗口移动至云主机的主控显示器。
在本实施例中,为了能够确定出目标进程新创建的窗口和已经销毁的窗口,Windows窗口管理器还会按照预设周期对JobObject中所记录的进程进行管理,也即,控制Windows窗口管理器通过JobObject枚举目标用户在当前时刻和目标时刻所打开的第一窗口和第二窗口,然后,将第一窗口和第二窗口进行对比,就可以识别出目标进程新创建的窗口和已经销毁的窗口。
对于目标用户新打开的目标窗口,通过对目标窗口的坐标进行计算就可以判断出目标窗口是否在客户端的显示器进行显示,如果目标窗口没有在客户端的显示器中进行显示,则说明目标用户无法查看到目标窗口。在此情况下,为了使得目标用户能够查看到目标窗口,可以调用Set Window Placement将目标窗口移动至云主机的主控显示器,以使得目标用户查看到目标窗口。
请参见图3,图3为本发明实施例所提供目标用户所创建用户会话与窗口操作权限管理之间的示意图。当Windows窗口管理器启动之后,目标用户使用客户端选择游戏,然后,连接云主机服务端,以获取游戏显示器。之后,云主机会创建当前会话的JobObject,启动游戏进程,并将该游戏进程绑定到JobObject。当将游戏进程绑定至JobObject时,JobObject会枚举目标用户所打开的窗口,并与前一时刻的枚举结果进行比较,以判断是否有新创建的新窗口,如果有新窗口,则缓存新窗口和相关的进程信息,此时,目标用户才会具有对新窗口和相关进程的合法操作权限,如果没有新窗口,则会等待JobObject的下一次枚举。其中,当将游戏进程绑定至JobObject时,有关该游戏进程的所有子进程都将会自动绑定到该JobOject,这样就便于目标用户对游戏进程的管理。
显然,通过本实施例所提供的技术方案,可以进一步提高目标用户在游戏过程中的体验。
作为一种优选的实施方式,上述步骤:获取目标用户执行键鼠操作的键鼠操作信息的过程之后,还包括:
判断目标用户执行键鼠操作的窗口是否属于JobObject;
若是,则将键鼠操作信息发送至驱动器,以使驱动器根据键鼠操作信息确定目标用户执行键鼠操作信息的目标进程,并调用目标API对目标进程模拟键鼠输入操作;
若否,则丢弃键鼠操作信息。
在实际应用中,如果目标用户执行键鼠操作的窗口属于JobObject,则说明目标用户对该窗口具有合法的操作权限,此时,就可以将键鼠操作信息发送至驱动器,以使得驱动器可以根据键鼠操作信息确定出目标用户执行键鼠操作信息的目标进程,并调用目标API对目标进程进行键鼠输入操作的模拟。
如果目标用户执行键鼠操作的窗口不属于JobObject,则说明目标用户对该窗口没有合法的操作权限,此时,云主机就可以控制驱动器将键鼠操作信息丢弃。这样就保证了目标用户不能通过类似任务管理器一类的Windows管理工具暴力杀掉其它用户操作权限的进程,由此就保证了目标用户的操作行为对其它用户而言是完全隔离与安全的。
并且,在此操作方式下,由于目标用户只能对具有操作权限的进程进行操作,而不能对不具有操作权限的进行操作,所以,目标用户几乎不可能通过木马或病毒来威胁云主机的安全运行,也不能强制结束系统关键进程等恶意操作所造成的系统蓝屏,由此就进一步保证了云主机的安全性。
显然,通过本实施例所提供的技术方案,可以进一步保证云主机在运行过程中的安全性与可靠性。
请参见图4,图4为本发明实施例所提供的一种键鼠输入装置的结构图,该键鼠输入装置包括:
用户连接模块21,用于当与目标用户建立连接时,则控制客户端捕获目标用户执行键鼠操作的键鼠操作信息,并将键鼠操作信息发送至服务端;
信息获取模块22,用于当服务端接收到键鼠操作信息时,则利用云主机自身的驱动器获取键鼠操作信息;
操作模拟模块23,用于当驱动器获取到键鼠操作信息时,则根据键鼠操作信息确定目标用户执行键鼠操作信息的目标进程,并调用目标API对目标进程模拟键鼠输入操作;其中,目标API为预先从云主机内核中所获取的与键鼠操作相关的应用程序接口。
本发明实施例所提供的一种键鼠输入装置,具有前述所公开的一种键鼠输入方法所具有的有益效果。
请参见图5,图5为本发明实施例所提供的一种键鼠输入设备的结构图,该键鼠输入设备包括:
存储器31,用于存储计算机程序;
处理器32,用于执行计算机程序时实现如前述所公开的一种键鼠输入方法的步骤。
本发明实施例所提供的一种键鼠输入设备,具有前述所公开的一种键鼠输入方法所具有的有益效果。
相应的,本发明实施例还公开了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如前述所公开的一种键鼠输入方法的步骤。
本发明实施例所提供的一种计算机可读存储介质,具有前述所公开的一种键鼠输入方法所具有的有益效果。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种键鼠输入方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
- 一种键鼠输入方法、装置、设备及介质
- 一种云游戏输入方法、装置、设备及介质