CN112799753B - 一种全屏独占屏蔽方法、装置、设备及介质 - Google Patents
一种全屏独占屏蔽方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN112799753B CN112799753B CN202110024900.XA CN202110024900A CN112799753B CN 112799753 B CN112799753 B CN 112799753B CN 202110024900 A CN202110024900 A CN 202110024900A CN 112799753 B CN112799753 B CN 112799753B
- Authority
- CN
- China
- Prior art keywords
- game
- objective
- full
- version
- screen
- 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
Links
Images
Classifications
-
- A—HUMAN NECESSITIES
- A63—SPORTS; GAMES; AMUSEMENTS
- A63F—CARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
- A63F13/00—Video games, i.e. games using an electronically generated display having two or more dimensions
- A63F13/50—Controlling the output signals based on the game progress
- A63F13/52—Controlling the output signals based on the game progress involving aspects of the displayed game scene
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4411—Configuring for operating with peripheral devices; Loading of device drivers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/70—Reducing energy consumption in communication networks in wireless communication networks
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- User Interface Of Digital Computer (AREA)
- Controls And Circuits For Display Device (AREA)
Abstract
本申请公开了一种全屏独占屏蔽方法、装置、设备及介质,包括:当获取到目标游戏的启动指令,则基于对应的游戏进程确定所述目标游戏对应的DX版本;基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。也即,本申请基于目标游戏的DX版本,劫持设置全屏独占的相关函数,禁止将游戏的显示方式设置为全屏独占,这样,能够避免全屏独占显示方式干扰其他游戏的运行,从而可以充分利用远程设备闲置的计算力,节约成本。
Description
技术领域
本申请涉及云游戏远程控制技术领域,特别涉及一种全屏独占屏蔽方法、装置、设备及介质。
背景技术
随着计算机科学的发展,计算机性能也在不断提高。游戏是计算机的一项重要应用场景,借助于高性能计算机,一些大型游戏能够渲染出逼真的画面,给玩家带来极佳的体验。但同时,这些游戏对计算机性能的要求也普遍较高,许多玩家因为低配硬件的限制,无法体验到上述游戏,而要购买一台能够流畅运行上述游戏的计算机,将会是一笔不小的开支。云游戏的出现,使得上述问题得到了很好的解决。
目前的云游戏应用存在如下问题:虚拟化方案成本高昂,且因虚拟化性能损失导致体验不佳;物理机方案避免了上述缺陷,但无法灵活分配硬件配置,导致性能冗余。为此可以采取多用户同时使用一台物理机的方案,充分利用性能,但由于多数游戏默认采用全屏独占方式运行,运行时会导致其它用户黑屏,致使此方案不能正常施行。
发明内容
有鉴于此,本申请的目的在于提供一种全屏独占屏蔽方法、装置、设备及介质,能够避免全屏独占显示方式干扰其他游戏的运行,从而可以充分利用远程设备闲置的计算力,节约成本。其具体方案如下:
第一方面,本申请公开了一种全屏独占屏蔽方法,包括:
当获取到目标游戏的启动指令,则基于对应的游戏进程确定所述目标游戏对应的DX版本;
基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;
劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。
可选的,所述基于对应的游戏进程确定所述目标游戏对应的DX版本,包括:
获取所述游戏进程的模块列表;
从所述模块列表中查找DX模块名称;
基于所述DX模块名称确定所述目标游戏对应的DX版本。
可选的,所述基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占,包括:
若所述DX版本为DX9或DX10或DX11,则基于所述DX版本劫持对应的第一目标函数,修改所述第一目标函数中的第一目标参数,以禁止在所述目标游戏初始化时将显示方式设置为全屏独占;劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;
若所述DX版本为DX12,则劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占。
可选的,劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占,包括:
若所述DX版本为DX9,劫持对应的第二目标函数,在所述第二目标函数中直接返回,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;
若所述DX版本为DX10或DX11或DX12,劫持对应的第二目标函数,记录所述第二目标函数的第二目标参数,并禁止基于所述第二目标参数设置所述显示方式。
可选的,若所述DX版本为DX10或DX11或DX12,所述方法还包括:
劫持全屏独占状态读取函数,返回记录的所述第二目标参数。
可选的,所述基于对应的游戏进程确定所述目标游戏对应的DX版本;基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率,包括:
对所述游戏进程进行预设DLL注入,通过所述预设DLL基于对应的游戏进程确定所述目标游戏对应的DX版本;基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。
第二方面,本申请公开了一种全屏独占屏蔽装置,包括:
DX版本确定模块,用于当获取到目标游戏的启动指令,则基于对应的游戏进程确定所述目标游戏对应的DX版本;
目标函数劫持模块,用于基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;
分辨率修改函数劫持模块,用于劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。
可选的,所述DX版本确定模块,具体用于:
获取所述游戏进程的模块列表;
从所述模块列表中查找DX模块名称;
基于所述DX模块名称确定所述目标游戏对应的DX版本。
第三方面,本申请公开了一种电子设备,包括:
存储器,用于保存计算机程序;
处理器,用于执行所述计算机程序,以实现前述的全屏独占屏蔽方法。
第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,所述计算机程序被处理器执行时实现前述的全屏独占屏蔽方法。
可见,本申请当获取到目标游戏的启动指令,则基于对应的游戏进程确定所述目标游戏对应的DX版本;基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。也即,本申请基于目标游戏的DX版本,劫持设置全屏独占的相关函数,禁止将游戏的显示方式设置为全屏独占,这样,能够避免全屏独占显示方式干扰其他游戏的运行,从而可以充分利用远程设备闲置的计算力,节约成本。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种全屏独占屏蔽方法流程图;
图2为本申请公开的一种具体的全屏独占屏蔽方法流程图;
图3为本申请公开的一种全屏独占屏蔽装置结构示意图;
图4为本申请公开的一种电子设备结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
目前的云游戏应用存在如下问题:虚拟化方案成本高昂,且因虚拟化性能损失导致体验不佳;物理机方案避免了上述缺陷,但无法灵活分配硬件配置,导致性能冗余。为此可以采取多用户同时使用一台物理机的方案,充分利用性能,但由于多数游戏默认采用全屏独占方式运行,运行时会导致其它用户黑屏,致使此方案不能正常施行。为此,本申请提供了一种全屏独占屏蔽方案,能够避免全屏独占显示方式干扰其他游戏的运行,从而可以充分利用远程设备闲置的计算力,节约成本。
参见图1所示,本申请实施例公开了一种全屏独占屏蔽方法,包括:
步骤S11:当获取到目标游戏的启动指令,则基于对应的游戏进程确定所述目标游戏对应的DX(Direct eXtension,多媒体编程接口)版本。
在具体的实施方式中,本实施例获取所述游戏进程的模块列表;从所述模块列表中查找DX模块名称;基于所述DX模块名称确定所述目标游戏对应的DX版本。
需要指出的是,由于不同版本的DirectX API(Application ProgrammingInterface,应用程序接口)接口有所区别,需要分别处理。本实施例可以通过调用CreateToolhelp32Snapshot获取游戏进程的模块列表,查找游戏进程使用的模块中是否存在d3d9.dll、d3d10.dll、d3d11.dll、d3d12.dll,如果存在,则d3d9.dll对应DirectX 9版本,d3d10.dll对应DirectX 10版本,d3d11.dll对应DirectX11版本,d3d12.dll对应Direct12版本。
步骤S12:基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占。
在具体的实施方式中,若所述DX版本为DX9或DX10或DX11,则基于所述DX版本劫持对应的第一目标函数,修改所述第一目标函数中的第一目标参数,以禁止在所述目标游戏初始化时将显示方式设置为全屏独占;劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;若所述DX版本为DX12,则劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占。
也即,本实施例可以劫持第一目标函数和第二目标函数,第一目标函数为在目标游戏初始化时设置显示方式的函数,第二目标函数为目标游戏内部或在获取用户设置指令时设置显示方式的函数。
具体的,劫持第一目标函数,将通过修改第一目标参数,将显示方式强制修改为非全屏独占模式。
需要指出的是,目前绝大多数游戏都支持全屏独占的显示模式,在这种模式下,游戏程序可以直接控制图形设备进行画面输出。非全屏独占模式下,游戏程序需要将渲染好的画面交给Windows的窗口管理器,再由窗口管理器将各个窗口的画面进行组合,并控制图形设备输出,这种传递会造成性能的损耗,因此大多数游戏在运行时,会默认使用全屏独占模式。但是,在单主机多用户场景下,无法支持默认使用全屏独占的游戏运行,原因为当游戏启用全屏独占模式时,当前计算机的图形设备由该游戏独占控制,除了游戏所在的显示器,其余显示器会变为黑屏状态,因此若一个用户打开了全屏独占的游戏,其余用户将看不到任何画面。因此,本实施例可以劫持第一目标函数,将通过修改第一目标参数,将显示方式强制修改为非全屏独占模式,避免以游戏默认的全屏独占模式进行显示。
其中,若所述DX版本为DX9,劫持对应的第二目标函数,在所述第二目标函数中直接返回,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;若所述DX版本为DX10或DX11或DX12,劫持对应的第二目标函数,记录所述第二目标函数的第二目标参数,并禁止基于所述第二目标参数设置所述显示方式。
进一步的,若所述DX版本为DX10或DX11或DX12,所述方法还包括:
劫持全屏独占状态读取函数,返回记录的所述第二目标参数。
也即,本申请实施例可以通过返回记录的第二目标参数使目标游戏不发现当前显示方式为非全屏独占状态。
步骤S13:劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。
在具体的实施方式中,劫持win32u.dll中的NtUserChangeDisplaySettings函数,屏蔽游戏进程调用该函数改变屏幕分辨率。
进一步,可以对所述游戏进程进行预设DLL(即Dynamic Link Library,动态链接库)注入,通过所述预设DLL基于对应的游戏进程确定所述目标游戏对应的DX版本;基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。
在具体的实施方式中,在游戏进程启动时,可以通过DetourCreateProcessWithDllsA注入所述预设DLL,该预设DLL先调用CreateToolhelp32Snapshot获取游戏进程的模块列表,根据使用的DX模块名称,判断DXAPI是DX9或DX10或DX11或DX12。针对DX9,劫持IDirect3D9::CreateDevice强制修改窗口化参数为TRUE,劫持IDirect3DDevice9::Reset屏蔽全屏化调用。针对DX10,劫持D3D10CreateDeviceAndSwapChain强制修改窗口化参数为TRUE,劫持IDXGISwapChain::SetFullScreenState屏蔽全屏化调用,劫持IDXGISwapChain::GetFullScreenState欺骗游戏当前的全屏化状态。针对DX11,劫持D3D11CreateDeviceAndSwapChain强制修改窗口化参数为TRUE,劫持IDXGISwapChain::SetFullScreenState屏蔽全屏化调用,劫持IDXGISwapChain::GetFullScreenState欺骗游戏当前的全屏化状态。针对DX12,劫持IDXGISwapChain::SetFullScreenState屏蔽全屏化调用,劫持IDXGISwapChain::GetFullScreenState欺骗游戏当前的全屏化状态。
可见,本申请实施例当获取到目标游戏的启动指令,则基于对应的游戏进程确定所述目标游戏对应的DX版本;基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。也即,本申请实施例基于目标游戏的DX版本,劫持设置全屏独占的相关函数,禁止将游戏的显示方式设置为全屏独占,这样,能够避免全屏独占显示方式干扰其他游戏的运行,从而可以充分利用远程设备闲置的计算力,节约成本。
例如,在一个真实系统内同时运行两款游戏,采用本申请实施例的方案可以避免两个游戏均被用户设置为全屏独占时,两个游戏无法同时显示的问题。
例如,参见图2所示,图2为本申请实施例公开的一种具体的全屏独占屏蔽方法流程图。基于云游戏单主机多用户环境的应用场景。当用户在客户机上选择一款要玩的游戏后,云平台会调度一台云主机为用户提供服务,在云主机服务端上运行游戏启动管理器,当一个用户接入时,该管理器会为用户启动游戏并注入包含全屏独占屏蔽功能的DLL,针对游戏进程进行全屏独占屏蔽。具体的,利用detours库的DetourCreateProcessWithDllsA注入DLL,在游戏进程main函数运行前便劫持DX9-DX12与全屏独占功能相关的API。
在注入的DLL中,首先判断游戏使用的DirectX版本,因为不同版本的DirectX API接口有所区别,基于版本分别处理。具体的,通过调用CreateToolhelp32Snapshot获取游戏进程的模块列表,查找游戏进程使用的模块中是否存在d3d9.dll、d3d10.dll、d3d11.dll、d3d12.dll,其中,d3d9.dll对应DirectX9版本,d3d10.dll对应DirectX 10版本,d3d11.dll对应DirectX11版本,d3d12.dll对应Direct12版本。获取游戏使用的DirectX版本后,针对不同版本的API进行对应处理。
针对DirectX 9,通过Direct3DCreate9创建IDirect3D9对象,通过detourDetourAttach劫持IDirect3D9::CreateDevice,在劫持的函数中强制将pPresentationParameters->Windowed参数修改为True,将pPresentationParameters->FullScreen_RefreshRateInHz参数修改为0;然后通过IDirect3D9::CreateDevice创建一个IDirect3DDevice9对象,通过DetourAttach劫持IDirect3DDevice9::Reset,在劫持的函数中直接返回,屏蔽对原始IDirect3DDevice9::Reset的调用。
针对DirectX 10,通过DetourAttach劫持D3D10CreateDeviceAndSwapChain,在劫持的函数中强制将pSwapChainDesc->Windowed修改为TRUE;然后通过D3D10CreateDeviceAndSwapChain创建IDXGISwapChain对象,通过DetourAttach劫持IDXGISwapChain::SetFullScreenState,在劫持的函数中屏蔽对原始劫持IDXGISwapChain::SetFullScreenState的调用,并根据Fullscreen参数记录游戏内部全屏独占状态;通过DetourAttach劫持IDXGISwapChain::GetFullScreenState,在劫持的函数中根据之前记录的游戏内部全屏独占状态返回虚拟的全屏独占状态。
针对DirectX 11,通过DetourAttach劫持D3D11CreateDeviceAndSwapChain,在劫持的函数中强制将pSwapChainDesc->Windowed修改为TRUE;然后通过D3D11CreateDeviceAndSwapChain创建IDXGISwapChain对象,通过DetourAttach劫持IDXGISwapChain::SetFullScreenState,在劫持的函数中屏蔽对原始劫持IDXGISwapChain::SetFullScreenState的调用,并根据Fullscreen参数记录游戏内部全屏独占状态;通过DetourAttach劫持IDXGISwapChain::GetFullScreenState,在劫持的函数中根据之前记录的游戏内部全屏独占状态返回虚拟的全屏独占状态。
针对DirectX 12,通过D3D12CreateDevice创建ID3D12Device对象,再通过ID3D12Device::CreateCommandQueue创建ID3D12CommandQueue对象,接着通过CreateDXGIFactory创建IDXGIFactory对象,然后通过IDXGIFactory::CreateSwapChain传入ID3D12CommandQueue对象创建IDXGISwapChain对象,通过DetourAttach劫持IDXGISwapChain::SetFullScreenState,在劫持的函数中屏蔽对原始劫持IDXGISwapChain::SetFullScreenState的调用,并根据Fullscreen参数记录游戏内部全屏独占状态;通过DetourAttach劫持IDXGISwapChain::GetFullScreenState,在劫持的函数中根据之前记录的游戏内部全屏独占状态返回虚拟的全屏独占状态。
进一步的,通常游戏在使用全屏独占功能时,还会修改屏幕分辨率,本实施例可以通过detour DetourAttach劫持win32u.dll中的NtUserChangeDisplaySettings函数,在Hook函数中直接返回,不调用真正的NtUserChangeDisplaySettings函数。
需要指出的是,当游戏初始化DirectX显示设备时,会调用被劫持的相应API,本实施例可以将初始化参数中的Windowed参数(窗口化)强制修改为TRUE,然后用修改后的参数去调用原始的初始化API,避免初始化时即启用全屏独占。当游戏主动或者用户手动设置全屏独占显示时,会调用被劫持的相应API,本实施例可以直接屏蔽对原始API的调用,并记录调用函数中的全屏独占参数值,避免主动启用全屏独占。当游戏内部获取全屏独占状态时,会调用被劫持的相应API,可以根据之前记录的游戏内部全屏独占参数值,返回虚拟的全屏独占状态,欺骗游戏,避免游戏内部处理逻辑出现问题。当游戏修改屏幕分辨率时,会调用被劫持的NtUserChangeDisplaySettings函数,本实施例可以直接屏蔽对原始API的调用,避免屏幕分辨率被修改。这样,使得一台远程设备可以不通过虚拟机,直接在一个真实系统上同时运行多个游戏,不同游戏的显示方式不会对其他游戏的显示产生冲突,从而可以充分利用远程设备闲置的计算力,节约成本。
参见图3所示,本申请实施例公开了一种全屏独占屏蔽装置,包括:
DX版本确定模块11,用于当获取到目标游戏的启动指令,则基于对应的游戏进程确定所述目标游戏对应的DX版本;
目标函数劫持模块12,用于基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;
分辨率修改函数劫持模块13,用于劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。
可见,本申请实施例当获取到目标游戏的启动指令,则基于对应的游戏进程确定所述目标游戏对应的DX版本;基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。也即,本申请实施例基于目标游戏的DX版本,劫持设置全屏独占的相关函数,禁止将游戏的显示方式设置为全屏独占,这样,能够避免全屏独占显示方式干扰其他游戏的运行,从而可以充分利用远程设备闲置的计算力,节约成本。
其中,所述DX版本确定模块11,具体用于:
获取所述游戏进程的模块列表;
从所述模块列表中查找DX模块名称;
基于所述DX模块名称确定所述目标游戏对应的DX版本。
并且,目标函数劫持模块12,具体用于若所述DX版本为DX9或DX10或DX11,则基于所述DX版本劫持对应的第一目标函数,修改所述第一目标函数中的第一目标参数,以禁止在所述目标游戏初始化时将显示方式设置为全屏独占;劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;若所述DX版本为DX12,则劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占。
进一步的,所述目标函数劫持模块12,具体用于若所述DX版本为DX9,劫持对应的第二目标函数,在所述第二目标函数中直接返回,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;若所述DX版本为DX10或DX11或DX12,劫持对应的第二目标函数,记录所述第二目标函数的第二目标参数,并禁止基于所述第二目标参数设置所述显示方式。
相应的,所述装置,还包括全屏独占状态读取函数劫持模块,用于劫持全屏独占状态读取函数,返回记录的所述第二目标参数。
在具体的实施方式中,所述装置具体用于对所述游戏进程进行预设DLL注入,通过所述预设DLL基于对应的游戏进程确定所述目标游戏对应的DX版本;基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。
参见图4所述,本申请实施例公开了一种电子设备20,包括处理器21和存储器22;其中,所述存储器22,用于保存计算机程序;所述处理器21,用于执行所述计算机程序,以实现前述实施例公开的全屏独占屏蔽方法。
关于上述全屏独占屏蔽方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
并且,所述存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,存储方式可以是短暂存储或者永久存储。
另外,所述电子设备20还包括电源23、通信接口24、输入输出接口25和通信总线26;其中,所述电源23用于为所述电子设备20上的各硬件设备提供工作电压;所述通信接口24能够为所述电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;所述输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
进一步的,本申请实施例还公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的全屏独占屏蔽方法。
关于上述全屏独占屏蔽方法的具体过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的一种全屏独占屏蔽方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (7)
1.一种全屏独占屏蔽方法,其特征在于,包括:
当获取到目标游戏的启动指令,则基于对应的游戏进程确定所述目标游戏对应的DX版本;
基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;
劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率;
其中,所述基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占,包括:
若所述DX版本为DX9或DX10或DX11,则基于所述DX版本劫持对应的第一目标函数,修改所述第一目标函数中的第一目标参数,以禁止在所述目标游戏初始化时将显示方式设置为全屏独占;劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;若所述DX版本为DX12,则劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;
并且,劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占,包括:
若所述DX版本为DX9,劫持对应的第二目标函数,在所述第二目标函数中直接返回,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;
若所述DX版本为DX10或DX11或DX12,劫持对应的第二目标函数,记录所述第二目标函数的第二目标参数,并禁止基于所述第二目标参数设置所述显示方式,所述方法还包括:劫持全屏独占状态读取函数,返回记录的所述第二目标参数。
2.根据权利要求1所述的全屏独占屏蔽方法,其特征在于,所述基于对应的游戏进程确定所述目标游戏对应的DX版本,包括:
获取所述游戏进程的模块列表;
从所述模块列表中查找DX模块名称;
基于所述DX模块名称确定所述目标游戏对应的DX版本。
3.根据权利要求1所述的全屏独占屏蔽方法,其特征在于,所述基于对应的游戏进程确定所述目标游戏对应的DX版本;基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率,包括:
对所述游戏进程进行预设DLL注入,通过所述预设DLL基于对应的游戏进程确定所述目标游戏对应的DX版本;基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率。
4.一种全屏独占屏蔽装置,其特征在于,包括:
DX版本确定模块,用于当获取到目标游戏的启动指令,则基于对应的游戏进程确定所述目标游戏对应的DX版本;
目标函数劫持模块,用于基于所述DX版本劫持对应的目标函数,以禁止将所述目标游戏的显示方式设置为全屏独占;
分辨率修改函数劫持模块,用于劫持屏幕分辨率修改函数,以禁止调用所述屏幕分辨率修改函数修改屏幕分辨率;
其中,目标函数劫持模块,具体用于若所述DX版本为DX9或DX10或DX11,则基于所述DX版本劫持对应的第一目标函数,修改所述第一目标函数中的第一目标参数,以禁止在所述目标游戏初始化时将显示方式设置为全屏独占;劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;若所述DX版本为DX12,则劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;
并且,劫持所述DX版本对应的第二目标函数,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占,包括:
若所述DX版本为DX9,劫持对应的第二目标函数,在所述第二目标函数中直接返回,以禁止所述目标游戏内部或在获取用户设置指令时调用所述第二目标函数将所述目标游戏的所述显示方式设置为全屏独占;
若所述DX版本为DX10或DX11或DX12,劫持对应的第二目标函数,记录所述第二目标函数的第二目标参数,并禁止基于所述第二目标参数设置所述显示方式,相应的,所述装置,还包括全屏独占状态读取函数劫持模块,用于劫持全屏独占状态读取函数,返回记录的所述第二目标参数。
5.根据权利要求4所述的全屏独占屏蔽装置,其特征在于,所述DX版本确定模块,具体用于:
获取所述游戏进程的模块列表;
从所述模块列表中查找DX模块名称;
基于所述DX模块名称确定所述目标游戏对应的DX版本。
6.一种电子设备,其特征在于,包括:
存储器,用于保存计算机程序;
处理器,用于执行所述计算机程序,以实现如权利要求1至3任一项所述的全屏独占屏蔽方法。
7.一种计算机可读存储介质,其特征在于,用于保存计算机程序,所述计算机程序被处理器执行时实现如权利要求1至3任一项所述的全屏独占屏蔽方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110024900.XA CN112799753B (zh) | 2021-01-08 | 2021-01-08 | 一种全屏独占屏蔽方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110024900.XA CN112799753B (zh) | 2021-01-08 | 2021-01-08 | 一种全屏独占屏蔽方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112799753A CN112799753A (zh) | 2021-05-14 |
CN112799753B true CN112799753B (zh) | 2023-04-25 |
Family
ID=75809449
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110024900.XA Active CN112799753B (zh) | 2021-01-08 | 2021-01-08 | 一种全屏独占屏蔽方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112799753B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111966311A (zh) * | 2020-07-15 | 2020-11-20 | 北京视博云信息技术有限公司 | 云游戏的显示设置方法、装置、可读存储介质及设备 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070107057A1 (en) * | 2005-11-10 | 2007-05-10 | Docomo Communications Laboratories Usa, Inc. | Method and apparatus for detecting and preventing unsafe behavior of javascript programs |
CN107885653B (zh) * | 2016-09-30 | 2020-12-04 | 腾讯科技(深圳)有限公司 | 一种数据处理系统、方法及装置 |
CN112051976B (zh) * | 2020-08-24 | 2022-09-30 | 南京巨鲨显示科技有限公司 | 一种自适应显示器最佳分辨率以及文本大小的方法 |
-
2021
- 2021-01-08 CN CN202110024900.XA patent/CN112799753B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111966311A (zh) * | 2020-07-15 | 2020-11-20 | 北京视博云信息技术有限公司 | 云游戏的显示设置方法、装置、可读存储介质及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112799753A (zh) | 2021-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9442897B2 (en) | Screenshot method and device | |
WO2018103550A1 (zh) | 应用程序页面处理方法和装置 | |
TWI739112B (zh) | 提供經由使用欺騙時脈及細粒度頻率控制實現之向後相容性的方法、系統以及非暫態電腦可讀取媒體 | |
US20190325562A1 (en) | Window rendering method and terminal | |
CN112799801B (zh) | 一种模拟鼠标指针绘制方法、装置、设备和介质 | |
CN116185743B (zh) | OpenGL接口的双显卡对比调试方法、装置及介质 | |
CN109885464B (zh) | 一种基于开放图形库的数据处理方法及系统 | |
WO2022100244A1 (zh) | 通信处理方法、装置、存储介质及电子设备 | |
CN110968395A (zh) | 一种在模拟器中处理渲染指令的方法及移动终端 | |
CN112799753B (zh) | 一种全屏独占屏蔽方法、装置、设备及介质 | |
CN114116227A (zh) | 一种无GPU支持的基于Wayland协议的显示方法、装置及设备 | |
CN111309421B (zh) | 界面资源的加载方法、装置、终端及存储介质 | |
CN114003225A (zh) | 窗口显示方法、装置、计算机设备和存储介质 | |
CN110941408B (zh) | 一种kvm虚拟机图形界面输出方法及装置 | |
CN116889733A (zh) | 游戏资源加载方法、装置、电子设备及存储介质 | |
CN108390916B (zh) | 一种图片下载的方法及终端 | |
US9804872B1 (en) | Method for emulation of a virtual OS bookmark on a host desktop | |
CN112367295B (zh) | 插件展示方法及装置、存储介质及电子设备 | |
CN116601602A (zh) | 对用户透明地预加载应用 | |
CN111292392A (zh) | 基于unity的图像显示方法、装置、设备及介质 | |
CN113934500A (zh) | 渲染方法、装置、存储介质及电子设备 | |
WO2021146741A1 (en) | Systems and methods of rendering effects during gameplay | |
EP3848800A1 (en) | Method and apparatus for displaying message box, terminal and storage medium | |
CN113617022B (zh) | 一种加快游戏应用启动速度的方法及装置 | |
US20230169622A1 (en) | Image processing |
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 |