CN112799801B - 一种模拟鼠标指针绘制方法、装置、设备和介质 - Google Patents

一种模拟鼠标指针绘制方法、装置、设备和介质 Download PDF

Info

Publication number
CN112799801B
CN112799801B CN202110024942.3A CN202110024942A CN112799801B CN 112799801 B CN112799801 B CN 112799801B CN 202110024942 A CN202110024942 A CN 202110024942A CN 112799801 B CN112799801 B CN 112799801B
Authority
CN
China
Prior art keywords
mouse pointer
simulated mouse
information
game
simulated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110024942.3A
Other languages
English (en)
Other versions
CN112799801A (zh
Inventor
傅博
甘锐
于泽明
李广斌
彭寿林
郭月丰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Wulian Technology Co ltd
Original Assignee
Hangzhou Wulian Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Wulian Technology Co ltd filed Critical Hangzhou Wulian Technology Co ltd
Priority to CN202110024942.3A priority Critical patent/CN112799801B/zh
Publication of CN112799801A publication Critical patent/CN112799801A/zh
Application granted granted Critical
Publication of CN112799801B publication Critical patent/CN112799801B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

本申请公开了一种模拟鼠标指针绘制方法、装置、设备、介质,该方法包括:基于串流客户端发送的游戏启动请求创建游戏进程;将游戏进程的进程ID添加到目标云主机上预设的内核驱动模块中的监控列表中;获取游戏进程的主窗口信息,并基于主窗口信息在游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将透明顶层窗口作为游戏进程对应的模拟鼠标指针的移动区域和绘制区域;创建游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境;调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针。这样能够使得每个游戏进程均可拥有一个独立的用户可视的模拟鼠标指针,互相均不干扰。

Description

一种模拟鼠标指针绘制方法、装置、设备和介质
技术领域
本申请涉及云游戏远程控制技术领域,特别涉及一种模拟鼠标指针绘制方法、装置、设备、介质。
背景技术
游戏是计算机的一项重要应用场景,借助于高性能计算机,一些大型游戏能够渲染出逼真的画面,给玩家带来极佳的体验。但同时,这些游戏对计算机性能的要求也普遍较高,许多玩家因为低配硬件的限制,无法体验到上述游戏,而要购买一台能够流畅运行上述游戏的计算机,将会是一笔不小的开支。云游戏的出现,使得上述问题得到了很好的解决。
云游戏是随着网络技术和云计算技术发展而诞生出的一种新型的游戏方式,在云游戏方式中,所有的游戏程序都在云游戏服务提供商提供的云主机上运行,云主机负责利用其高性能CPU和GPU渲染出游戏画面,串流模块会将云主机上的视频进行压缩,然后通过网络传输给用户,这样用户只需要拥有一台具备基本视频解压能力的设备,就可以流畅的体验各类需要高性能硬件的游戏。
在实际应用中,一般会利用服务器作为云主机,在云主机上运行多个虚拟机来为不同的用户提供云游戏服务,但是虚拟机往往会带来性能上的损失,而且由于服务器CPU有低主频多核心的特点,所以不适合对CPU主频要求高的游戏;该服务器的服务器CPU和专业显卡价格昂贵,使机房的建设成本高昂。所以使用普通电脑作为云主机解决上述问题,这样主机的操作系统直接运行在物理机上,避免了虚拟化带来的性能损失,可以达到等同于真机的游戏效果。但是此时云主机性能完全取决于硬件规格,云游戏服务提供商在部署云主机时会按照大型游戏的标准采购高规格硬件,所以用户在使用此类云主机运行普通游戏时,无法灵活分配硬件配置,使得性能仍有冗余。
针对上述问题,可以采取在单台云主机上同时运行多个游戏的方法,为多个用户提供服务,来充分发挥云主机的性能。在这种模式下,会通过虚拟显示器驱动程序虚拟出多个显示器,然后将用户的游戏分别显示在单独的显示器上,做到各用户互不干扰。但是,在上述的单主机多用户场景下,即使云主机有多个虚拟显示器,操作系统也只会绘制一个鼠标光标,每个用户的操作都会影响该光标的移动,用户无法正常的通过光标移动获取输入反馈,各用户的鼠标操作无法隔离,致使此方案不能正常施行。
因此,如何解决上述的单主机多用户场景下,各个用户鼠标操作的分离是本领域技术人员要解决的问题。
发明内容
有鉴于此,本申请的目的在于提供一种模拟鼠标绘制方法、装置、设备、介质,能够使得一个远程设备可以不通过虚拟机,直接在一个真实系统上同时运行多个游戏,每个游戏进程均可拥有一个独立的用户可视的模拟鼠标指针,各个用户可以根据各自的模拟鼠标指针反馈进行鼠标相关操作,互相均不干扰,从而可以充分利用云主机对应的远程设备闲置的计算力,节约成本。其具体方案如下:
第一方面,本申请公开了一种模拟鼠标指针绘制方法,应用于目标云主机上的游戏管理器,包括:
基于串流客户端发送的游戏启动请求创建游戏进程,以启动所述游戏启动请求对应的游戏;
将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表中,以便所述内核驱动模块在接收到所述游戏进程调用内核中的目标API时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数;
获取所述游戏进程的主窗口信息,并基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域;
创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境;
调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,其中,所述模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息。
可选地,所述获取所述游戏进程的主窗口信息,包括:
根据所述进程ID以及所述游戏进程的目标属性查找所述游戏进程的主窗口;
获取所述主窗口的主窗口信息,其中,所述主窗口信息包括所述主窗口的位置和窗口大小。
可选地,所述基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,包括:
创建所述游戏进程对应的透明顶层窗口,其中,所述透明顶层窗口的大小和位置分别与所述主窗口信息中的所述主窗口的大小和位置相同;
将所述透明顶层窗口叠加到所述主窗口的主窗口显示区域上方。
可选地,所述创建所述游戏进程对应的模拟鼠标指针绘制线程之前,还包括:
将所述模拟鼠标指针的坐标初始化为所述透明顶层窗口的左上角;
将所述模拟鼠标指针的图标初始化为Windows自带的IDC_ARROW鼠标指针。
可选地,所述模拟鼠标指针绘制方法,还包括:
通过RPC接口获取所述目标云主机上的串流服务端发送的模拟鼠标指针信息,其中,所述模拟鼠标指针信息为所述串流客户端通过TCP协议传输到所述串流服务端的信息,所述模拟鼠标指针信息包括用户ID以及鼠标移动数据。
可选地,所述模拟鼠标指针绘制方法,还包括:
调用所述目标云主机上的数据读取线程从所述内核驱动模块中读取所述模拟鼠标指针信息,其中,所述模拟鼠标指针信息为所述API调用信息,包括调用进程ID、调用API类型以及调用参数,所述数据读取线程为所述目标云主机上公用的线程,所述目标API包括SetCursor API、ShowCursor API、SetCursorPos API、ClipCursor API。
可选地,所述调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,包括:
当所述模拟鼠标指针信息为ShowCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述ShowCursor API调用信息在所述透明顶层窗口上绘制或隐藏所述模拟鼠标指针;
当所述模拟鼠标指针信息为SetCursorPos API调用信息或所述串流客户端发送的模拟鼠标指针信息时,调用所述模拟鼠标指针绘制线程根据所述模拟鼠标指针信息在所述透明顶层窗口上更新所述模拟鼠标指针的坐标;
当所述模拟鼠标指针信息为ClipCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述ClipCursor API调用信息更新所述模拟鼠标指针在所述透明顶层窗口上的移动范围;
当所述模拟鼠标指针信息为SetCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述SetCursor API调用信息在所述透明顶层窗口上绘制对应位图的模拟鼠标指针。
第二方面,本申请公开了一种模拟鼠标指针绘制装置,应用于目标云主机上的游戏管理器,包括:
游戏启动模块,用于基于串流客户端发送的游戏启动请求创建游戏进程,以启动所述游戏启动请求对应的游戏;
进程ID添加模块,用于将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表中,以便所述内核驱动模块在接收到所述游戏进程调用内核中的目标API时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数;
透明顶层窗口创建模块,用于获取所述游戏进程的主窗口信息,并基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域;
绘制线程创建模块,用于创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境;
模拟鼠标指针绘制模块,用于调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,其中,所述模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息。
第三方面,本申请公开了一种电子设备,包括:
存储器和处理器;
其中,所述存储器,用于存储计算机程序;
所述处理器,用于执行所述计算机程序,以实现前述公开的模拟鼠标指针绘制方法。
第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的模拟鼠标指针绘制方法。
可见,本申请先基于串流客户端发送的游戏启动请求创建游戏进程,以启动所述游戏启动请求对应的游戏,然后将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表中,以便所述内核驱动模块在接收到所述游戏进程调用内核中的目标API时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数,再获取所述游戏进程的主窗口信息,并基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域,接着还需要创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境,接着便可以调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,其中,所述模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息。由此可见,本申请可以为各个游戏进程创建对应的透明顶层窗口,将透明顶层窗口作为对应的游戏进程的模拟鼠标指针的移动和绘制区域,不同的游戏进程拥有自身对应的模拟鼠标指针绘制和移动的区域,这样可以使得一个远程设备可以不通过虚拟主机,直接在一个真实系统上同时运行多个游戏,且每个游戏进程均可拥有一个独立的用户可视的模拟鼠标指针,各个用户可以根据各自的模拟鼠标指针反馈进行鼠标相关操作,互相均不干扰,从而可以充分利用云主机对应的远程设备闲置的计算力,节约成本。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种模拟鼠标指针绘制方法流程图;
图2为本申请公开的一种具体的模拟鼠标指针绘制方法流程图;
图3为本申请公开的一种具体的模拟鼠标指针绘制方法流程图;
图4为本申请公开的一种具体的模拟鼠标指针绘制方法部分流程图;
图5为本申请公开的一种具体的模拟鼠标指针绘制方法部分流程图;
图6为本申请公开的一种模拟鼠标指针的绘制结果图;
图7为本申请公开的一种模拟鼠标指针绘制装置结构示意图;
图8为本申请公开的一种电子设备结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前,使用普通电脑作为云主机时,主机的操作系统直接运行在物理机上,此时云主机性能完全取决于硬件规格,云游戏服务提供商在部署云主机时会按照大型游戏的标准采购高规格硬件,所以用户在使用此类云主机运行普通游戏时,无法灵活分配硬件配置,使得性能仍有冗余。此时采取在单台云主机上同时运行多个游戏的方法,为多个用户提供服务,来充分发挥云主机的性能的方法。在这种模式下,会通过虚拟显示器驱动程序虚拟出多个显示器,然后将用户的游戏分别显示在单独的显示器上,做到各用户互不干扰。但是,在上述的单主机多用户场景下,即使云主机有多个虚拟显示器,操作系统也只会绘制一个鼠标光标,每个用户的操作都会影响该光标的移动,用户无法正常的通过光标移动获取输入反馈,各用户的鼠标操作无法隔离,致使此方案不能正常施行。有鉴于此,本申请提出了一种模拟鼠标指针绘制方法,能够使得一个远程设备可以不通过虚拟机,直接在一个真实系统上同时运行多个游戏,每个游戏进程均可拥有一个独立的用户可视的模拟鼠标指针,各个用户可以根据各自的模拟鼠标指针反馈进行鼠标相关操作,互相均不干扰,从而可以充分利用云主机对应的远程设备闲置的计算力,节约成本。
参见图1所示,本申请实施例公开了一种模拟鼠标指针绘制方法,应用于目标云主机上的游戏管理器,该方法包括:
步骤S11:基于串流客户端发送的游戏启动请求创建游戏进程,以启动所述游戏启动请求对应的游戏。
在实际应用中,当用户通过用户客户端向提供云游戏的云平台发送游戏启动请求时,其中,所述游戏启动请求中包括所述用户的用户ID和想要启动的游戏ID(identity,身份标识),所述用户客户端上的串流客户端会将所述游戏启动请求发送到所述云平台上,所述云平台在接收到所述游戏启动请求之后,会根据所述游戏ID以及所述云平台上各个云主机的部署情况为所述用户分配一个目标云主机,其中,所述目标云主机为普通电脑,而不是服务器,且所述目标云主机为所述云平台分配给所述用户的云主机,在分配所述目标云主机给所述用户之后,所以目标云主机上的串流服务端可以与所述串流客户端通信,所述串流客户端将所述游戏启动请求通过TCP(Transmission Control Protocol,传输控制协议)发送到所述串流服务端,所述串流服务端会通过RPC(Remote Procedure Call Protocol,远程过程调用协议)接口将所述游戏启动请求发送到所述目标云主机上的游戏管理器中,所以所述游戏管理器便可以根据所述游戏启动请求创建对应的游戏进程,以启动所述游戏启动请求中的游戏。
具体的,所述游戏管理器可以调用CreateProcess函数创建所述游戏启动请求对应的游戏进程,以启动所述游戏启动请求对应的游戏。
步骤S12:将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表中,以便所述内核驱动模块在接收到所述游戏进程调用内核中的目标API时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数。
在创建所述游戏进程启动所述游戏之后,还需要将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表,这样所述内核驱动模块在接收到所述游戏进程调用内核中的目标API(Application Programming Interface,应用程序接口)时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数,所述目标API包括SetCursor API、ShowCursor API、SetCursorPos API、ClipCursor API。
也即,在基于串流客户端发送的游戏启动请求创建游戏进程之前,需要先在所述目标云主机上加载所述内核驱动模块,以便所述内核驱动模块在接收到所述游戏进程调用内核中的SetCursor API、ShowCursor API、SetCursorPos API、ClipCursor API时,对所述游戏进程对所述目标API的API调用信息进行拦截,所述内核驱动模块将会通过Hook的方式劫持Win32kbase.sys模块中的NtUserClipCursor、NtUserSetCursorPos、NtUserSetCursor、NtUserShowCursor四个函数。也即,所述目标API对应的用户态函数就是NtUserClipCursor、NtUserSetCursorPos、NtUserSetCursor、NtUserShowCursor四个函数。
具体的,在所述目标云主机上加载所述内核驱动模块之后,当有游戏进程调用所述目标API时,所述内核驱动模块将会先去所述监控列表中查找进程ID是否为需要监控的ID,若不是,则按照原始的路径正常调用对应的API;若是,则拦截对应的API调用信息,包括调用进程ID、调用API类型以及调用参数,将API调用信息插入到一个链表中。
其中,所述内核驱动模块提供第一DeviceIoControl接口和第二DeviceIoControl接口,这样所述游戏管理器便可以通过第一DeviceIoControl接口将所述游戏进程的进程ID添加到所述监控列表中,也可以通过所述第二DeviceIoControl接口读取所述链表中的API调用信息。这些信息将用于获取对应游戏进程的鼠标位图、鼠标是否显示信息、鼠标坐标限制信息等,并用于鼠标坐标的计算。
在将所述进程ID添加到所述监控列表中之前,还需要调用GetProcessId函数获取所述游戏进程的进程ID。
步骤S13:获取所述游戏进程的主窗口信息,并基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域。
在创建所述游戏进程之后,所述游戏进程会有对应的主窗口,用于显示游戏,所以还需要获取所述游戏进程的主窗口信息,其中,所述主窗口信息包括主窗口的位置和大小,以及基于所述主窗口信息在所述游戏进程的主窗口显示区域上创建透明顶层窗口,这样便可以将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域。
其中,获取所述游戏进程的主窗口信息,包括:根据所述进程ID以及所述游戏进程的目标属性查找所述游戏进程的主窗口;获取所述主窗口的主窗口信息,其中,所述主窗口信息包括所述主窗口的位置和窗口大小,所述目标属性包括GW_OWNER属性、Visible属性、ClassName属性。
具体的,所述游戏管理器可以通过定时调用EnumWindows函数根据所述进程ID、GW_OWNER属性、Visible属性、ClassName属性,查找所述游戏进程的主窗口,直到找到主窗口。找到所述主窗口后通过GetWindowInfo函数获取所述主窗口的位置和窗口大小。其中,EnumWindows是一种计算机函数,该函数枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数,回调函数返回FALSE将停止枚举,否则EnumWindows函数继续到所有顶层窗口枚举完为止。GetWindowInfo是一个函数,用于检索有关指定窗口的信息。
其中,基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,包括:创建所述游戏进程对应的透明顶层窗口,其中,所述透明顶层窗口的大小和位置分别与所述主窗口信息中的所述主窗口的大小和位置相同;将所述透明顶层窗口叠加到所述主窗口的主窗口显示区域上方。
具体的,游戏管理器会可以调用CreateWindowEx函数创建一个属性为WS_EX_LAYERED|WS_EX_TRANSPARENT|WS_EX_TOPMOST|WS_EX_TOOLWINDOW的透明顶层窗口,并叠加在所述游戏进程的主窗口显示区域上方,作为模拟鼠标指针的移动区域和绘制区域,所述透明顶层窗口的大小和位置与所述游戏进程的主窗口的大小和位置对应相同。
步骤S14:创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境。
在实际实施过程中,还需要创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境。
在创建所述游戏进程对应的模拟鼠标指针绘制线程之前,还包括:将所述模拟鼠标指针的坐标初始化为所述透明顶层窗口的左上角;将所述模拟鼠标指针的图标初始化为Windows自带的IDC_ARROW鼠标指针。
也即,将所述模拟鼠标指针初始化为绘制区域的左上角,所述模拟鼠标指针的图标初始化为Windows自带的IDC_ARROW鼠标指针,通过LoadCursor函数可以获取IDC_ARROW指针图标的句柄,然后再通过IWICImagingFactory::CreateBitmapFromHICON可以从指针图标句柄获取鼠标指针的位图。
创建所述透明顶层窗口、初始化模拟鼠标指针的坐标以及位图完毕后,所述游戏管理器需要为所述游戏进程创建一个单独的模拟鼠标指针绘制线程,用于所述游戏进程的模拟鼠标指针的绘制。所述模拟鼠标指针绘制线程将会先调用ID2D1Factory::CreateHwndRenderTarget创建一个基于所述透明顶层窗口的ID2D1HwndRenderTarget,然后每隔(1000/60=)16.67ms调用ID2D1HwndRenderTarget::Clear清空所述透明顶层窗口,也即绘制区域,再根据模拟鼠标指针信息,调用ID2D1HwndRenderTarget::DrawBitmap在对应位置绘制模拟鼠标指针。这样在每个用户看来其控制的游戏窗口上就有了一个独立的鼠标指针。
步骤S15:调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,其中,所述模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息。
可以理解的是,在创建所述模拟鼠标指针绘制线程之后,便可以调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,这里所说的模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息,也即,包括所述用户客户端获取到的用户移动鼠标引起的鼠标坐标变化数据,以及所述游戏进程调用所述目标API时所述内核驱动模块截获的API调用信息。
可见,本申请先基于串流客户端发送的游戏启动请求创建游戏进程,以启动所述游戏启动请求对应的游戏,然后将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表中,以便所述内核驱动模块在接收到所述游戏进程调用内核中的目标API时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数,再获取所述游戏进程的主窗口信息,并基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域,接着还需要创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境,接着便可以调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,其中,所述模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息。由此可见,本申请可以为各个游戏进程创建对应的透明顶层窗口,将透明顶层窗口作为对应的游戏进程的模拟鼠标指针的移动和绘制区域,不同的游戏进程拥有自身对应的模拟鼠标指针绘制和移动的区域,这样可以使得一个远程设备可以不通过虚拟主机,直接在一个真实系统上同时运行多个游戏,且每个游戏进程均可拥有一个独立的用户可视的模拟鼠标指针,各个用户可以根据各自的模拟鼠标指针反馈进行鼠标相关操作,互相均不干扰,从而可以充分利用云主机对应的远程设备闲置的计算力,节约成本。
参见图2所示,本申请实施例公开了一种具体的模拟鼠标指针绘制方法,应用于目标云主机上的游戏管理器,该方法包括:
步骤S21:基于串流客户端发送的游戏启动请求创建游戏进程,以启动所述游戏启动请求对应的游戏。
步骤S22:将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表中,以便所述内核驱动模块在接收到所述游戏进程调用内核中的目标API时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数。
步骤S23:获取所述游戏进程的主窗口信息,并基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域。
步骤S24:创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境。
步骤S21至步骤S24的具体实施过程可以参考前述实施例中公开的内容,在此不再进行赘述。
步骤S25:通过RPC接口获取所述目标云主机上的串流服务端发送的模拟鼠标指针信息,其中,所述模拟鼠标指针信息为所述串流客户端通过TCP协议传输到所述串流服务端的信息,所述模拟鼠标指针信息包括用户ID以及鼠标移动数据。
在实际应用中,当用户进行鼠标移动时,用户所在的用户客户端上的串流客户端将会通过windows的rawinput接口读取鼠标移动数据,然后通过TCP将用户ID和鼠标移动数据发送给所述目标云主机上的串流服务端,其中,所述鼠标移动数据为鼠标相对于移动之前的坐标变化值,串流服务端又通过RPC接口调用通知给所述游戏管理器,所述游戏管理器根据用户ID找到对应的模拟鼠标指针的当前坐标数据,结合所述用户ID对应的鼠标移动范围限制和所述鼠标移动数据,更新所述模拟鼠标指针的坐标数据。从而使得每个用户移动鼠标时,其对应的游戏窗口上的模拟鼠标指针可以进行移动反馈。
步骤S26:调用所述目标云主机上的数据读取线程从所述内核驱动模块中读取所述模拟鼠标指针信息,其中,所述模拟鼠标指针信息为所述API调用信息,包括调用进程ID、调用API类型以及调用参数。
在实际实施过程中,所述游戏管理器还需要调用所述目标云主机上的数据读取线程从所述内核驱动模块中读取所述模拟鼠标指针信息,其中,所述模拟鼠标指针信息为所述API调用信息,包括调用进程ID、调用API类型以及调用参数,所述数据读取线程为所述目标云主机上公用的线程。
具体的,所述游戏管理器除了为每个用户创建一个独立的模拟鼠标指针绘制线程外,还会为所有用户创建一个公用的数据读取线程,调用所述第二DeviceIoControl接口从所述内核驱动模块的所述链表中读取所述游戏管理器拦截的SetCursor、ShowCursor、SetCursorPos、ClipCursor四个API的API调用信息,所述API调用信息中包含了调用进程ID、调用API类型以及调用参数,所述数据读取线程通过所述调用进程ID将读取到的API调用信息对应到具体的用户的游戏进程,然后更新该用户的游戏进程的鼠标指针信息,包括移动范围限制、鼠标指针位图、是否隐藏鼠标指针、鼠标指针位置等。
步骤S27:调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,其中,所述模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息。
相应地,还需要调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针。
具体的,当所述模拟鼠标指针信息为ShowCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述ShowCursor API调用信息在所述透明顶层窗口上绘制或隐藏所述模拟鼠标指针。
当所述模拟鼠标指针信息为SetCursorPos API调用信息或所述串流客户端发送的模拟鼠标指针信息时,调用所述模拟鼠标指针绘制线程根据所述模拟鼠标指针信息在所述透明顶层窗口上更新所述模拟鼠标指针的坐标。
当所述模拟鼠标指针信息为ClipCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述ClipCursor API调用信息更新所述模拟鼠标指针在所述透明顶层窗口上的移动范围。
当所述模拟鼠标指针信息为SetCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述SetCursor API调用信息在所述透明顶层窗口上绘制对应位图的模拟鼠标指针。
也即,当有游戏进程调用ShowCursor API之后,所述游戏管理器会通过所述数据读取进程收到的ShowCursor调用信息。所述游戏管理器根据其中的调用进程ID和调用参数,更新对应用户的模拟鼠标指针是否显示的状态。这样每个游戏进程隐藏或者显示模拟鼠标指针时,可以独立地反馈给对应的用户。
当有游戏进程调用ClipCursor API之后,所述游戏管理器会通过所述数据读取进程收到的ClipCursor调用参数。所述游戏管理器根据其中的调用进程ID和调用参数,更新对应用户的模拟鼠标指针移动范围。这样每个游戏进程改变模拟鼠标指针移动范围时,可以独立地限制用户的模拟鼠标指针坐标范围。
当有游戏进程调用SetCursorPosAPI之后,所述游戏管理器会通过所述数据读取进程收到的SetCursorPos调用参数。所述游戏管理器根据其中的调用进程ID和调用参数,更新对应用户的模拟鼠标指针坐标。这样每个游戏进程主动改变模拟鼠标指针坐标时,可以独立地反馈给对应的用户。
当有游戏进程调用SetCursorAPI之后,所述游戏管理器会通过所述数据读取进程收到的SetCursor调用参数。所述游戏管理器根据其中的调用进程ID和调用参数,通过IWICImagingFactory::CreateBitmapFromHICON从指针图标句柄中获取鼠标指针的位图,更新对应用户的模拟鼠标指针位图。这样每个游戏进程改变模拟鼠标图案时,可以独立地反馈给对应的用户。
通过上述方法,可以实现单主机多用户环境下,针对进程的模拟鼠标指针绘制。使得一台远程设备可以不通过虚拟机,直接在一个真实系统上同时运行多个应用或者游戏,每个进程均可拥有一个独立的用户可视的模拟鼠标指针,后续多个用户可以根据各自的模拟鼠标指针反馈进行鼠标相关操作,互相均不干扰,从而可以充分利用远程设备闲置的计算力,节约成本。
参见图3所示,为模拟鼠标指针绘制流程图。首先加载所述内核驱动模块,以便所述内核驱动模块劫持NtUserClipCursor、NtUserSetCursorPos、NtUserSetCursor、NtUserShowCursor四个函数,然后创建设备对象,以便在所述内核驱动模块创建所述第一DeviceIoControl接口和第二DeviceIoControl接口,用于通讯;所述游戏管理器创建与所述内核驱动模块通讯的所述数据读取线程;所述游戏管理器启动游戏;添加所述游戏对应的进程ID到所述内核驱动模块中的监控列表中;获取所述游戏的游戏进程对应的主窗口信息,在所述游戏进程的主窗口显示区域上层创建透明顶层窗口;创建模拟鼠标绘制线程;初始化Direct2D绘制环境;根据模拟鼠标指针信息在所述透明顶层窗口上绘制模拟鼠标指针。所述数据读取线程从所述内核驱动模块中读取被监控的游戏进程的API调用信息;更新模拟鼠标位图、移动范围、是否隐藏、坐标等信息。
参见图4所示,为模拟鼠标指针绘制部分流程图。游戏进程调用SetCursor API、ShowCursor API、SetCursorPos API、ClipCursor API时,所述内核驱动模块截获API调用信息并存储;所述数据读取线程获取到API调用通知;从所述内核驱动模块中读取API调用信息,并根据其中的调用进程ID判断是哪个用户的模拟鼠标环境;根据所述API调用信息中的调用API类型和调用参数更新模拟鼠标指针的相关信息。
参见图5所示,为模拟鼠标指针绘制部分流程图。用户进行鼠标移动时,通过USB接口,将所述鼠标移动数据传输到串流客户端,所述串流客户端通过TCP协议将所述鼠标移动数据和用户ID发送到串流服务端,所述串流服务端通过RPC接口将所述鼠标移动数据和用户ID发送到所述游戏管理器,根据所述用户ID找到对应的模拟鼠标环境,更新模拟鼠标指针的坐标。
参见图6所示,为模拟鼠标指针的绘制结果图。可以为一个云主机上的不同游戏进程绘制对应的模拟鼠标指针,例如,用户1、用户2、用户3的模拟鼠标指针。
例如在一个真实系统内同时运行英雄联盟和极乐迪斯科两款游戏,采用前述的模拟鼠标指针绘制方法可以使得A用户可以根据英雄联盟游戏界面上的模拟鼠标指针反馈操作英雄联盟的同时,B用户可以通过极乐迪斯科游戏界面上的模拟鼠标指针反馈操作街霸,两款游戏一起运行,两个用户拥有各自的鼠标指针,互相不干扰。
参见图7所示,本申请实施例公开了一种模拟鼠标指针绘制装置,应用于目标云主机上的游戏管理器,包括:
游戏启动模块11,用于基于串流客户端发送的游戏启动请求创建游戏进程,以启动所述游戏启动请求对应的游戏;
进程ID添加模块12,用于将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表中,以便所述内核驱动模块在接收到所述游戏进程调用内核中的目标API时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数;
透明顶层窗口创建模块13,用于获取所述游戏进程的主窗口信息,并基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域;
绘制线程创建模块14,用于创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境;
模拟鼠标指针绘制模块15,用于调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,其中,所述模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息。
可见,本申请先基于串流客户端发送的游戏启动请求创建游戏进程,以启动所述游戏启动请求对应的游戏,然后将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表中,以便所述内核驱动模块在接收到所述游戏进程调用内核中的目标API时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数,再获取所述游戏进程的主窗口信息,并基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域,接着还需要创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境,接着便可以调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,其中,所述模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息。由此可见,本申请可以为各个游戏进程创建对应的透明顶层窗口,将透明顶层窗口作为对应的游戏进程的模拟鼠标指针的移动和绘制区域,不同的游戏进程拥有自身对应的模拟鼠标指针绘制和移动的区域,这样可以使得一个远程设备可以不通过虚拟主机,直接在一个真实系统上同时运行多个游戏,且每个游戏进程均可拥有一个独立的用户可视的模拟鼠标指针,各个用户可以根据各自的模拟鼠标指针反馈进行鼠标相关操作,互相均不干扰,从而可以充分利用云主机对应的远程设备闲置的计算力,节约成本。
在一些具体的实施过程中,所述透明顶层窗口创建模块13,用于:根据所述进程ID以及所述游戏进程的目标属性查找所述游戏进程的主窗口;获取所述主窗口的主窗口信息,其中,所述主窗口信息包括所述主窗口的位置和窗口大小。
在一些具体的实施过程中,所述透明顶层窗口创建模块13,用于:创建所述游戏进程对应的透明顶层窗口,其中,所述透明顶层窗口的大小和位置分别与所述主窗口信息中的所述主窗口的大小和位置相同;将所述透明顶层窗口叠加到所述主窗口的主窗口显示区域上方。
在一些具体的实施过程中,所述绘制线程创建模块14,还用于:
将所述模拟鼠标指针的坐标初始化为所述透明顶层窗口的左上角;
将所述模拟鼠标指针的图标初始化为Windows自带的IDC_ARROW鼠标指针。
在一些具体的实施过程中,所述模拟鼠标指针绘制装置,还包括:
第一数据读取模块,用于通过RPC接口获取所述目标云主机上的串流服务端发送的模拟鼠标指针信息,其中,所述模拟鼠标指针信息为所述串流客户端通过TCP协议传输到所述串流服务端的信息,所述模拟鼠标指针信息包括用户ID以及鼠标移动数据。
在一些具体的实施过程中,所述模拟鼠标指针绘制装置,还包括:
第二数据读取模块,用于调用所述目标云主机上的数据读取线程从所述内核驱动模块中读取所述模拟鼠标指针信息,其中,所述模拟鼠标指针信息为所述API调用信息,包括调用进程ID、调用API类型以及调用参数,所述数据读取线程为所述目标云主机上公用的线程,所述目标API包括SetCursor API、ShowCursor API、SetCursorPos API、ClipCursorAPI。
在一些具体的实施过程中,所述模拟鼠标指针绘制模块15,用于:
当所述模拟鼠标指针信息为ShowCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述ShowCursor API调用信息在所述透明顶层窗口上绘制或隐藏所述模拟鼠标指针;
当所述模拟鼠标指针信息为SetCursorPos API调用信息或所述串流客户端发送的模拟鼠标指针信息时,调用所述模拟鼠标指针绘制线程根据所述模拟鼠标指针信息在所述透明顶层窗口上更新所述模拟鼠标指针的坐标;
当所述模拟鼠标指针信息为ClipCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述ClipCursor API调用信息更新所述模拟鼠标指针在所述透明顶层窗口上的移动范围;
当所述模拟鼠标指针信息为SetCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述SetCursor API调用信息在所述透明顶层窗口上绘制对应位图的模拟鼠标指针。
参见图8,为本申请实施例提供的一种电子设备20的结构示意图,该电子设备20可以实现前述实施例中公开的模拟鼠标指针绘制方法步骤。
通常,本实施例中的电子设备20包括:处理器21和存储器22。
其中,处理器21可以包括一个或多个处理核心,比如四核心处理器、八核心处理器等。处理器21可以采用DSP(digital signal processing,数字信号处理)、FPGA(field-programmable gate array,现场可编程们阵列)、PLA(programmable logic array,可编程逻辑阵列)中的至少一种硬件来实现。处理器21也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(central processing unit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器21可以集成有GPU(graphics processing unit,图像处理器),GPU用于负责显示屏所需要显示的图像的渲染和绘制。一些实施例中,处理器21可以包括AI(artificialintelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器22可以包括一个或多个计算机可读存储介质,计算机可读存储介质可以是非暂态的。存储器22还可以包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器22至少用于存储以下计算机程序221,其中,该计算机程序被处理器21加载并执行之后,能够实现前述任一实施例中公开的模拟鼠标指针绘制方法步骤。
在一些实施例中,电子设备20还可包括有显示屏23、输入输出接口24、通信接口25、传感器26、电源27以及通信总线28。
本技术领域人员可以理解,图8中示出的结构并不构成对电子设备20的限定,可以包括比图示更多或更少的组件。
进一步的,本申请实施例还公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述任一实施例中公开的模拟鼠标指针绘制方法。
其中,关于上述模拟鼠标指针绘制方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得一系列包含其他要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的一种模拟鼠标指针绘制方法、装置、设备、介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (10)

1.一种模拟鼠标指针绘制方法,其特征在于,应用于目标云主机上的游戏管理器,包括:
基于串流客户端发送的游戏启动请求创建游戏进程,以启动所述游戏启动请求对应的游戏;
将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表中,以便所述内核驱动模块在接收到所述游戏进程调用内核中的目标API时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数;
获取所述游戏进程的主窗口信息,并基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域;
创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境;
调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,其中,所述模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息。
2.根据权利要求1所述的模拟鼠标指针绘制方法,其特征在于,所述获取所述游戏进程的主窗口信息,包括:
根据所述进程ID以及所述游戏进程的目标属性查找所述游戏进程的主窗口;
获取所述主窗口的主窗口信息,其中,所述主窗口信息包括所述主窗口的位置和窗口大小。
3.根据权利要求2所述的模拟鼠标指针绘制方法,其特征在于,所述基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,包括:
创建所述游戏进程对应的透明顶层窗口,其中,所述透明顶层窗口的大小和位置分别与所述主窗口信息中的所述主窗口的大小和位置相同;
将所述透明顶层窗口叠加到所述主窗口的主窗口显示区域上方。
4.根据权利要求1所述的模拟鼠标指针绘制方法,其特征在于,所述创建所述游戏进程对应的模拟鼠标指针绘制线程之前,还包括:
将所述模拟鼠标指针的坐标初始化为所述透明顶层窗口的左上角;
将所述模拟鼠标指针的图标初始化为Windows自带的IDC_ARROW鼠标指针。
5.根据权利要求1所述的模拟鼠标指针绘制方法,其特征在于,还包括:
通过RPC接口获取所述目标云主机上的串流服务端发送的模拟鼠标指针信息,其中,所述模拟鼠标指针信息为所述串流客户端通过TCP协议传输到所述串流服务端的信息,所述模拟鼠标指针信息包括用户ID以及鼠标移动数据。
6.根据权利要求1至5任一项所述的模拟鼠标指针绘制方法,其特征在于,还包括:
调用所述目标云主机上的数据读取线程从所述内核驱动模块中读取所述模拟鼠标指针信息,其中,所述模拟鼠标指针信息为所述API调用信息,包括调用进程ID、调用API类型以及调用参数,所述数据读取线程为所述目标云主机上公用的线程,所述目标API包括SetCursor API、ShowCursor API、SetCursorPos API、ClipCursor API。
7.根据权利要求6所述的模拟鼠标指针绘制方法,其特征在于,所述调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,包括:
当所述模拟鼠标指针信息为ShowCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述ShowCursor API调用信息在所述透明顶层窗口上绘制或隐藏所述模拟鼠标指针;
当所述模拟鼠标指针信息为SetCursorPosAPI调用信息或所述串流客户端发送的模拟鼠标指针信息时,调用所述模拟鼠标指针绘制线程根据所述模拟鼠标指针信息在所述透明顶层窗口上更新所述模拟鼠标指针的坐标;
当所述模拟鼠标指针信息为ClipCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述ClipCursor API调用信息更新所述模拟鼠标指针在所述透明顶层窗口上的移动范围;
当所述模拟鼠标指针信息为SetCursor API调用信息时,调用所述模拟鼠标指针绘制线程根据所述SetCursor API调用信息在所述透明顶层窗口上绘制对应位图的模拟鼠标指针。
8.一种模拟鼠标指针绘制装置,其特征在于,应用于目标云主机上的游戏管理器,包括:
游戏启动模块,用于基于串流客户端发送的游戏启动请求创建游戏进程,以启动所述游戏启动请求对应的游戏;
进程ID添加模块,用于将所述游戏进程的进程ID添加到所述目标云主机上预设的内核驱动模块中的监控列表中,以便所述内核驱动模块在接收到所述游戏进程调用内核中的目标API时,对API调用信息进行拦截和存储,其中,所述内核驱动模块用于劫持所述目标API对应的用户态函数;
透明顶层窗口创建模块,用于获取所述游戏进程的主窗口信息,并基于所述主窗口信息在所述游戏进程的主窗口显示区域上层创建透明顶层窗口,以便将所述透明顶层窗口作为所述游戏进程对应的模拟鼠标指针的移动区域和绘制区域;
绘制线程创建模块,用于创建所述游戏进程对应的模拟鼠标指针绘制线程,并初始化Direct2D绘制环境;
模拟鼠标指针绘制模块,用于调用所述模拟鼠标指针绘制线程根据模拟鼠标指针信息在所述透明顶层窗口上绘制所述模拟鼠标指针,其中,所述模拟鼠标指针信息包括从所述串流客户端和所述驱动模块中获取到的信息。
9.一种电子设备,其特征在于,包括:
存储器和处理器;
其中,所述存储器,用于存储计算机程序;
所述处理器,用于执行所述计算机程序,以实现权利要求1至7任一项所述的模拟鼠标指针绘制方法。
10.一种计算机可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的模拟鼠标指针绘制方法。
CN202110024942.3A 2021-01-08 2021-01-08 一种模拟鼠标指针绘制方法、装置、设备和介质 Active CN112799801B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110024942.3A CN112799801B (zh) 2021-01-08 2021-01-08 一种模拟鼠标指针绘制方法、装置、设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110024942.3A CN112799801B (zh) 2021-01-08 2021-01-08 一种模拟鼠标指针绘制方法、装置、设备和介质

Publications (2)

Publication Number Publication Date
CN112799801A CN112799801A (zh) 2021-05-14
CN112799801B true CN112799801B (zh) 2023-11-17

Family

ID=75809455

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110024942.3A Active CN112799801B (zh) 2021-01-08 2021-01-08 一种模拟鼠标指针绘制方法、装置、设备和介质

Country Status (1)

Country Link
CN (1) CN112799801B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116185441B (zh) * 2021-11-29 2024-09-10 比亚迪股份有限公司 功能模块的管理方法、装置、设备和介质
CN115202495B (zh) * 2022-09-08 2022-12-16 深圳市湘凡科技有限公司 鼠标硬件的模拟移动方法、装置、设备及存储介质
CN116389801B (zh) * 2023-05-31 2023-07-28 北京庭宇科技有限公司 一种多端一体的云串流客户端实现方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008269615A (ja) * 2007-04-24 2008-11-06 Beijing Kingsoft Software Co Ltd 複数の表示画面領域に同時にマウスポインターを表示する方法及び装置
CN102857534A (zh) * 2011-07-01 2013-01-02 云联(北京)信息技术有限公司 一种基于云计算的远程交互方法
CN102855133A (zh) * 2011-07-01 2013-01-02 云联(北京)信息技术有限公司 一种计算机处理单元交互式系统
CN110321193A (zh) * 2019-05-05 2019-10-11 四川盛趣时代网络科技有限公司 一种基于Direct3D共享纹理的交互方法及系统
CN111870948A (zh) * 2020-07-10 2020-11-03 杭州雾联科技有限公司 一种云游戏单主机多用户环境下的窗口管理方法及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008269615A (ja) * 2007-04-24 2008-11-06 Beijing Kingsoft Software Co Ltd 複数の表示画面領域に同時にマウスポインターを表示する方法及び装置
CN102857534A (zh) * 2011-07-01 2013-01-02 云联(北京)信息技术有限公司 一种基于云计算的远程交互方法
CN102855133A (zh) * 2011-07-01 2013-01-02 云联(北京)信息技术有限公司 一种计算机处理单元交互式系统
CN110321193A (zh) * 2019-05-05 2019-10-11 四川盛趣时代网络科技有限公司 一种基于Direct3D共享纹理的交互方法及系统
CN111870948A (zh) * 2020-07-10 2020-11-03 杭州雾联科技有限公司 一种云游戏单主机多用户环境下的窗口管理方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
一种基于内核事件的Windows系统游戏反外挂方法;傅建明;杨铮;罗陈可;黄坚伟;;电子与信息学报(第09期);全文 *

Also Published As

Publication number Publication date
CN112799801A (zh) 2021-05-14

Similar Documents

Publication Publication Date Title
CN112799801B (zh) 一种模拟鼠标指针绘制方法、装置、设备和介质
US11386623B2 (en) Methods, systems, and computer program product for managing and displaying webpages in a virtual three-dimensional space with a mixed reality system
JP5506120B2 (ja) ディスプレイ面を複数の仮想ディスプレイ区域に区分化するための装置及び方法
US10957107B2 (en) Snapping, virtual inking, and accessibility in augmented reality
JP2006190281A (ja) グラフィックサブシステムを仮想化するシステムおよび方法
US20100289804A1 (en) System, mechanism, and apparatus for a customizable and extensible distributed rendering api
US20130057561A1 (en) System and method for rendering graphics content associated with an application process to a display area managed by another process
US20070296718A1 (en) Dynamic resizing of graphics content rendered by an application to facilitate rendering of additional graphics content
US20100141678A1 (en) Command remoting
CN109045694B (zh) 虚拟场景显示方法、装置、终端及存储介质
CN112947969B (zh) 一种页面离屏渲染方法、装置、设备和可读介质
CN111870948A (zh) 一种云游戏单主机多用户环境下的窗口管理方法及系统
CN115546410A (zh) 窗口展示方法、装置、电子设备及存储介质
CN116546228B (zh) 用于虚拟场景的推流方法、装置、设备及存储介质
CN111708533B (zh) 在应用瘦客户端中设置鼠标显示状态的方法及装置
CN110941408B (zh) 一种kvm虚拟机图形界面输出方法及装置
CN112684965A (zh) 动态壁纸状态变更方法、装置、电子设备及存储介质
JP2021522721A (ja) 画面キャプチャ方法、端末および記憶媒体
CN111243069B (zh) 一种Unity3D引擎的场景切换方法和系统
CN114020396A (zh) 应用程序的显示方法和应用程序的数据生成方法
CN111813404B (zh) 基于混合图形显示的应用方法、介质及客户端
CN118170284B (zh) 窗口渲染方法、装置、设备以及介质
CN114816629B (zh) 绘制显示对象的方法、装置、存储介质及电子装置
CN113660500B (zh) 直播房间的展示方法、装置、存储介质及电子设备
US11403831B1 (en) Efficient color theming of background images in web-based mixed reality environments

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant