CN115658216A - 应用程序窗口的处理方法、设备及计算机可读存储介质 - Google Patents
应用程序窗口的处理方法、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN115658216A CN115658216A CN202211673554.9A CN202211673554A CN115658216A CN 115658216 A CN115658216 A CN 115658216A CN 202211673554 A CN202211673554 A CN 202211673554A CN 115658216 A CN115658216 A CN 115658216A
- Authority
- CN
- China
- Prior art keywords
- window
- desktop
- application program
- host
- virtual machine
- 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.)
- Granted
Links
Images
Landscapes
- User Interface Of Digital Computer (AREA)
Abstract
本申请提供了一种应用程序窗口的处理方法、设备及计算机可读存储介质,该方法应用于宿主机,宿主机包括宿主机操作系统,宿主机操作系统中运行着虚拟机,虚拟机包括虚拟机操作系统,该方法包括:接收用于启动虚拟机操作系统中的应用程序的第一输入操作;响应于第一输入操作,在宿主机操作系统提供的宿主机桌面上绘制应用程序的应用程序窗口;在宿主机桌面上监测针对应用程序窗口的第二输入操作;响应于监测到第二输入操作,通过虚拟机操作系统向应用程序发送通知消息。本申请实施例通过将虚拟机中运行的应用程序的窗口融合在宿主机的桌面上,使得应用程序和宿主机中的本地应用的使用感受一样,有助于提升用户体验。
Description
技术领域
本申请涉及计算机领域,更为具体的,涉及一种应用程序窗口的处理方法、设备及计算机可读存储介质。
背景技术
虚拟化技术使得在一台计算机中可以同时运行多个操作系统成为可能。如果一台计算机中运行有虚拟机,则宿主机和虚拟机可以分别运行一个操作系统,而且,虚拟机操作系统和宿主机操作系统中均可以运行多个应用程序。
但是,虚拟机桌面和宿主机桌面是相互隔离的,而且虚拟机中运行的应用程序的窗口只能在虚拟机桌面范围内进行显示,应用程序的窗口显示与宿主机本地应用程序的使用感受存在差异。
发明内容
本申请提供一种应用程序窗口的处理方法、设备及计算机可读存储介质。下面对本申请实施例涉及的各个方面进行介绍。
第一方面,提供一种应用程序窗口的处理方法,该方法应用于宿主机,所述宿主机包括宿主机操作系统,所述宿主机操作系统中运行着虚拟机,所述虚拟机包括虚拟机操作系统,该方法包括:接收用于启动所述虚拟机操作系统中的应用程序的第一输入操作;响应于所述第一输入操作,在所述宿主机操作系统提供的宿主机桌面上绘制所述应用程序的应用程序窗口;在所述宿主机桌面上监测针对所述应用程序窗口的第二输入操作;响应于监测到所述第二输入操作,通过所述虚拟机操作系统向所述应用程序发送通知消息,所述通知消息用于通知所述应用程序处理所述第二输入操作。
本申请实施例通过将虚拟机中运行的应用程序的窗口融合在宿主机的桌面上,使得应用程序的使用和宿主机中安装的本地应用的使用感受一样,从而有助于提升用户体验。
作为一种可能的实现方式,所述应用程序与所述虚拟机操作系统兼容,且所述应用程序与所述宿主机操作系统不兼容。
本申请实施例通过将宿主机操作系统不支持的应用程序运行在宿主机中的虚拟机中,同时将虚拟机中运行的程序的窗口融合在宿主机桌面上,有助于提升用户体验。
作为一种可能的实现方式,所述虚拟机操作系统中运行着服务端程序,所述宿主机操作系统上运行着客户端程序,所述应用程序窗口在所述宿主机桌面的绘制是基于所述服务端程序与所述客户端程序之间的数据交互实现的,所述数据交互是基于所述虚拟机与所述宿主机之间的共享内存进行的。
本申请实施例通过共享内存的方式实现宿主机和虚拟机的数据交互,能够降低数据交互的延时,有助于提升用户体验。
作为一种可能的实现方式,所述在所述宿主机操作系统提供的宿主机桌面上绘制所述应用程序窗口,包括:获取所述虚拟机的视窗系统的窗口信息;从所述视窗系统的窗口信息中滤除所述虚拟机操作系统自带的系统窗口信息,得到所述应用程序窗口的窗口信息;根据所述应用程序窗口的窗口信息,在所述宿主机桌面上绘制所述应用程序窗口。
本申请实施例通过从虚拟机中视窗系统的窗口信息过滤掉系统自带的窗口信息的方式获取应用程序的窗口信息,能够避免应用程序窗口信息的遗漏。
作为一种可能的实现方式,所述处理方法还包括:监测所述应用程序窗口的窗口信息的变化;响应于所述应用程序窗口的窗口信息发生变化,在所述宿主机桌面上重新绘制所述应用程序窗口。
本申请实施例通过监测应用程序窗口的窗口信息的变化,能够及时更新宿主机桌面中的应用程序窗口,提升用户体验。
作为一种可能的实现方式,所述宿主机包括内存,所述内存为所述虚拟机能够访问的内存,且所述内存用于存储所述应用程序窗口的窗口信息,所述监测所述应用程序窗口的窗口信息的变化,包括:定时获取所述视窗系统中的当前窗口信息;比较所述当前窗口信息与所述内存中存储的所述窗口信息,以确定所述应用程序窗口的窗口信息是否发生改变。
本申请实施例通过将窗口信息存储在内存中,方便窗口信息对比,而且能够提高窗口信息的处理效率。
作为一种可能的实现方式,所述处理方法还包括:在所述虚拟机操作系统提供的虚拟机桌面上创建全屏无边框窗口;在所述全屏无边框窗口中填充所述宿主机桌面的桌面图像,得到所述虚拟机桌面的背景图像。
本申请实施例通过在虚拟机中将应用程序的窗口堆叠在宿主机桌面的桌面图像上,使得将应用程序的窗口重绘在宿主机上时,避免因透明窗口渲染不兼容造成的应用程序窗口出现黑边、黑块的问题。
作为一种可能的实现方式,所述在所述全屏无边框窗口中填充所述宿主机桌面的桌面图像之前,所述处理方法还包括:获取所述宿主机桌面的初始桌面图像;从所述初始桌面图像中裁剪所述应用程序窗口的窗口图像,得到所述宿主机桌面的桌面图像。
本申请实施例通过在将宿主机桌面图像填充至虚拟机之前,裁剪掉应用程序的窗口部分,避免应用程序窗口重绘在宿主机桌面时窗口重影的问题。
作为一种可能的实现方式,所述应用程序窗口包括所述应用程序的以下中的一种或多种:主窗口、子窗口、系统托盘图标,以及窗口控件。
本申请实施例通过将应用程序的主窗口、子窗口、系统托盘图标,以及窗口控件融合在宿主机桌面,使得在融合后的桌面上能够实现应用程序的完整体验。
第二方面,提供一种应用程序窗口的处理设备,该处理设备应用于宿主机,所述宿主机包括宿主机操作系统,所述宿主机操作系统中运行着虚拟机,所述虚拟机包括虚拟机操作系统,该处理设备包括:接收模块,用于接收用于启动所述虚拟机操作系统中的应用程序的第一输入操作;第一绘制模块,用于响应于所述第一输入操作,在所述宿主机操作系统提供的宿主机桌面上绘制所述应用程序的应用程序窗口;第一监测模块,用于在所述宿主机桌面上监测针对所述应用程序窗口的第二输入操作;发送模块,用于响应于监测到所述第二输入操作,通过所述虚拟机操作系统向所述应用程序发送通知消息,所述通知消息用于通知所述应用程序处理所述第二输入操作。
本申请实施例通过将虚拟机中运行的应用程序的窗口融合在宿主机的桌面上,使得应用程序的使用和宿主机中安装的本地应用的使用感受一样,从而有助于提升用户体验。
作为一种可能的实现方式,所述应用程序与所述虚拟机操作系统兼容,且所述应用程序与所述宿主机操作系统不兼容。
本申请实施例通过将宿主机操作系统不支持的应用程序运行在宿主机中的虚拟机中,同时将虚拟机中运行的程序的窗口融合在宿主机桌面上,有助于提升用户体验。
作为一种可能的实现方式,所述虚拟机操作系统中运行着服务端程序,所述宿主机操作系统上运行着客户端程序,所述应用程序窗口在所述宿主机桌面的绘制是基于所述服务端程序与所述客户端程序之间的数据交互实现的,所述数据交互是基于所述虚拟机与所述宿主机之间的共享内存进行的。
本申请实施例通过共享内存的方式实现宿主机和虚拟机的数据交互,能够降低数据交互的延时,有助于提升用户体验。
作为一种可能的实现方式,所述在所述宿主机操作系统提供的宿主机桌面上绘制所述应用程序窗口,包括:获取所述虚拟机的视窗系统的窗口信息;从所述视窗系统的窗口信息中滤除所述虚拟机操作系统自带的系统窗口信息,得到所述应用程序窗口的窗口信息;根据所述应用程序窗口的窗口信息,在所述宿主机桌面上绘制所述应用程序窗口。
本申请实施例通过从虚拟机中视窗系统的窗口信息过滤掉系统自带的窗口信息的方式获取应用程序的窗口信息,能够避免应用程序窗口信息的遗漏。
作为一种可能的实现方式,所述处理方法还包括:监测所述应用程序窗口的窗口信息的变化;响应于所述应用程序窗口的窗口信息发生变化,在所述宿主机桌面上重新绘制所述应用程序窗口。
本申请实施例通过监测应用程序窗口的窗口信息的变化,能够及时更新宿主机桌面中的应用程序窗口,提升用户体验。
作为一种可能的实现方式,所述宿主机包括内存,所述内存为所述虚拟机能够访问的内存,且所述内存用于存储所述应用程序窗口的窗口信息,所述监测所述应用程序窗口的窗口信息的变化,包括:定时获取所述视窗系统中的当前窗口信息;比较所述当前窗口信息与所述内存中存储的所述窗口信息,以确定所述应用程序窗口的窗口信息是否发生改变。
本申请实施例通过将窗口信息存储在内存中,方便窗口信息对比,而且能够提高窗口信息的处理效率。
作为一种可能的实现方式,所述处理方法还包括:在所述虚拟机操作系统提供的虚拟机桌面上创建全屏无边框窗口;在所述全屏无边框窗口中填充所述宿主机桌面的桌面图像,得到所述虚拟机桌面的背景图像。
本申请实施例通过在虚拟机中将应用程序的窗口堆叠在宿主机桌面的桌面图像上,使得将应用程序的窗口重绘在宿主机上时,避免因透明窗口渲染不兼容造成的应用程序窗口出现黑边、黑块的问题。
作为一种可能的实现方式,所述在所述全屏无边框窗口中填充所述宿主机桌面的桌面图像之前,所述处理方法还包括:获取所述宿主机桌面的初始桌面图像;从所述初始桌面图像中裁剪所述应用程序窗口的窗口图像,得到所述宿主机桌面的桌面图像。
本申请实施例通过在将宿主机桌面图像填充至虚拟机之前,裁剪掉应用程序的窗口部分,避免应用程序窗口重绘在宿主机桌面时窗口重影的问题。
作为一种可能的实现方式,所述应用程序窗口包括所述应用程序的以下中的一种或多种:主窗口、子窗口、系统托盘图标,以及窗口控件。
本申请实施例通过将应用程序的主窗口、子窗口、系统托盘图标,以及窗口控件融合在宿主机桌面,使得在融合后的桌面上能够实现应用程序的完整体验。
第三方面,提供一种计算机,包括:存储器,用于存储程序;处理器,用于调用所述存储器中的程序,以执行如第一方面或第一方面任意一种可能的实现方式所述的方法。
第四方面,提供一种计算机可读存储介质,其上存储有程序,该程序用于执行如第一方面或第一方面任意一种可能的实现方式所述的方法。
附图说明
图1为本申请实施例提供的在两种计算设备中运行虚拟机的示意图。
图2为本申请实施例提供的一种在虚拟机中运行应用程序的示意图。
图3为本申请实施例提供的一种应用程序窗口的处理方法的流程示意图。
图4为本申请实施例提供的图2中应用程序窗口融合在宿主机桌面的示意图。
图5为本申请实施例提供的一种应用程序窗口处理方法的应用架构示意图。
图6为本申请实施例提供的一种应用程序的操作方法的流程示意图。
图7为本申请实施例提供的一种在宿主机桌面绘制应用程序窗口的方法流程示意图。
图8为本申请实施例提供的一种窗口过滤推送方法的流程示意图。
图9为本申请实施例提供的一种桌面实时同步方法的流程示意图。
图10为本申请实施例提供的未使用桌面同步方法的透明窗口绘制结果示意图。
图11为本申请实施例提供的使用桌面同步方法的透明窗口绘制结果示意图。
图12为本申请实施例提供的一种基于网络套接字的通信方式示意图。
图13为本申请实施例提供的一种基于共享内存的通信方式示意图。
图14为本申请实施例提供的一种应用程序窗口的处理设备的结构示意图。
图15为本申请实施例提供的一种计算机的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
在计算机中,虚拟化(virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理组态所限制。
在实际使用中,虚拟化技术通常是通过在宿主机,也可以称为本地计算机,运行虚拟机实现的。在创建虚拟机时,需要将宿主机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用宿主机一样对虚拟机进行操作。
使用虚拟化技术使得在一台计算机中可以同时运行多个操作系统成为可能。如果一台计算机中运行有虚拟机,则该计算机和虚拟机可以分别运行一个操作系统,虚拟机中的运行操作系统可以和宿主机中运行的操作系统相同,也可以不同。而且,在虚拟机操作系统和宿主机操作系统中均可以运行多个应用程序。
图1给出了在两种计算设备中运行虚拟机的示意图。
参见图1,图1可以包括图100a和图100b,图100a为在台式计算机中运行虚拟机的示意图。图100b为在笔记本计算机中运行虚拟机的示意图。其中,110a和110b为宿主机桌面,120a和120b为虚拟机桌面。
图2给出了一种在100a所示的虚拟机中运行应用程序的示意图。虚拟机桌面120a中包括虚拟机桌面应用图标121,应用程序窗口122以及虚拟机系统托盘123。宿主机桌面110a中包括宿主机桌面应用图标111和112以及系统托盘(系统任务栏)113。其中,虚拟机桌面应用图标、宿主机桌面应用图标以及系统托盘均是示例性给出,本申请对该内容不做限定。
可以看出,虚拟机桌面120a和宿主机桌面110a是相互隔离的,且虚拟机桌面区域通常小于宿主机桌面110a。如果在虚拟机中运行应用程序,应用程序的窗口只能在120a所示的范围内显示和接收人机交互操作,操作范围受到限制。而且虚拟机桌面120a和宿主机桌面110a之间需要特殊的操作才能实现切换,不利于用户体验。
虚拟化技术应用十分广泛,例如,虚拟化技术可以用于解决应用程序与宿主机桌面不兼容的问题。
随着桌面计算机硬件能力和软件应用需求的不断发展,不同厂商的桌面操作系统的软件生态都在不断壮大,随之也暴露出应用程序在不同桌面操作系统下不兼容的问题。由于不同桌面操作系统厂商各自的系统调用接口及视窗系统互不兼容,导致应用程序厂商不得不针对不同桌面操作系统开发不同的软件版本,以满足不同桌面操作系统用户的需求,这无疑大大增加了应用程序厂商的开发工作量,同时也导致用户更换桌面操作系统后可能无法找到所需的应用程序版本等问题。
为了解决不同桌面操作系统下软件兼容性问题,相关技术提出了模拟器技术和虚拟化技术两种解决方案。
模拟器技术可以通过模拟应用程序的系统调用接口实现,该方案优点是占用系统资源较少、应用程序执行效率较高。缺点是针对不同应用程序专门模拟适配,导致支持迁移的应用程序种类不多。
如前文所述,虚拟化技术可以通过在宿主机运行一个虚拟机,虚拟机中安装应用程序所依赖的桌面操作系统,用户可以进入虚拟机桌面运行应用程序。该方案优点是几乎所有应用程序无需做任何适配修改即可以在虚拟机中运行,缺点是用户使用依赖虚拟机桌面,无法与当前宿主机桌面很好的融合。一种可能的虚拟化技术的实现方法包括步骤S1至步骤S5。
在步骤S1,上电启动宿主机,该宿主机已经安装桌面操作系统。
在步骤S2,在宿主机中安装一台虚拟机,该虚拟机的桌面操作系统与宿主机的桌面操作系统不兼容。
在步骤S3,启动虚拟机。
在步骤S4,通过虚拟机桌面视窗安装应用程序,该应用程序支持在虚拟机桌面操作系统运行,而不支持在宿主机桌面操作系统运行。
在步骤S5,在虚拟机桌面视窗中运行并使用应用程序。
通过上述虚拟化技术可以解决应用程序在不同桌面操作系统上兼容性问题,但是需要依赖虚拟机桌面对应用程序进行人机交互。由于虚拟机桌面是独立的显示操作窗口,会造成鼠标键盘作用范围受到限制,而且在实现应用程序人机交互的过程中,宿主机桌面和虚拟机桌面相互隔离,导致窗口显示和用户操作存在差异,用户体验不好。另外,虚拟机桌面和宿主机桌面切换需要特殊的操作,给用户使用造成了障碍。
为了解决上述问题,本申请实施例提供了一种应用程序窗口的处理方法,可以将虚拟机中运行的应用程序的人机交互以及应用程序窗口融合在宿主机桌面上,也就是说可以使得应用程序在宿主机桌面的使用和宿主机中安装的本地应用的使用感受一样,从而有助于提升用户体验。
图3为本申请实施例提供的一种应用程序窗口的处理方法的流程示意图。方法300可以应用于宿主机,宿主机可以包括宿主机操作系统,宿主机操作系统中运行着虚拟机,虚拟机可以包括虚拟机操作系统。操作系统例如可以为Windows操作系统,也可以为Linux操作系统。
参见图3,方法300包括步骤S310至步骤S340。
在步骤S310中,接收用于启动虚拟机操作系统中的应用程序的第一输入操作。
在本申请实施例中,第一输入操作可以指用户通过设备(即运行虚拟机操作系统的设备)的输入设备(包括但不限于鼠标、键盘等)所输入的操作,例如可以包括点击操作、按压操作等。
在接收用于启动虚拟机操作系统中的应用程序的第一输入操作之前,可以先将应用程序安装在虚拟机操作系统中。作为一种实现方式,可以在宿主机视窗系统下运行应用程序安装程序,以实现应用程序在虚拟机操作系统中的安装。例如,宿主机可以根据该安装程序后缀,确定应用程序安装的操作系统位置。如果应用程序为虚拟机操作系统对应的程序,宿主机可以通过与虚拟机的通信,通过在宿主机桌面上的人机交互完成应用程序在虚拟机中的安装。作为另一种实现方式,进入虚拟机视窗系统,运行应用程序安装程序,通过在虚拟机桌面上的人机交互完成应用程序在虚拟机中的安装。无论是哪种安装方式,应用程序安装完成后可以在宿主机桌面创建应用程序的快捷方式。
虚拟机操作系统中的应用程序的第一输入操作可以通过宿主机桌面接收,也可以通过虚拟机桌面接收。但是为了给用户提供更好的体验,通常在宿主机桌面接收虚拟机操作系统中的应用程序的第一输入操作,第一输入操作例如可以为前文提到的宿主机桌面中的应用程序的快捷方式的点击操作。
在步骤S320中,响应于第一输入操作,在宿主机操作系统提供的宿主机桌面上绘制应用程序的应用程序窗口。
如果接收到启动应用程序的第一输入操作,例如双击应用程序的快捷方式,可以在宿主机操作系统提供的宿主机桌面上绘制应用程序的应用程序窗口(也可以称为应用程序的窗口集)。
由于应用程序需要虚拟机操作系统中运行,因此宿主机可以将与应用程序关联的第一输入操作发送给虚拟机,然后根据虚拟机针对第一输入操作的响应信息,在宿主机桌面上绘制应用程序窗口。
在宿主机桌面上绘制应用程序窗口可以采用窗口重定向技术。窗口重定向是将应用程序窗口从源操作系统分离到目的操作系统中显示和控制的技术。通过窗口重定向技术可以将虚拟机操作系统中的应用程序窗口分离到宿主机操作系统中进行显示和控制。
窗口重定向技术是基于宿主机和虚拟机之间的通信实现的。作为一种实现方式,宿主机和虚拟机可以基于窗口重定向协议进行通信。窗口重定向协议是为实现窗口重定向而设计的源、目的操作系统都能识别的命令字和参数信息,如创建窗口,关闭窗口,输入操作上报等命令字,窗口信息和时间信息等参数信息。其中,输入操作也可以称为输入事件。
在步骤S330中,在宿主机桌面上监测针对应用程序窗口的第二输入操作。
通过上述两个步骤,可以将应用程序显示内容融合在宿主机桌面中,但是应用程序的使用除了包括应用程序窗口等内容的显示,还包括人机交互操作。因此,需要将应用程序的人机交互内容融合在宿主机桌面,以实现应用程序在宿主机桌面的完整融合。
应用程序的人机交互可以通过针对应用程序窗口的第二输入操作实现。第二输入操作可以包括鼠标事件,也可以包括键盘事件。鼠标事件可以指通过鼠标所输入的操作,键盘事件可以指通过键盘所输入的操作。
在宿主机桌面可以监测针对应用程序窗口的第二输入操作,而对第二输入操作可以进行实时监测,也可以进行定期监测。在本申请实施例中,为了提高宿主机中应用程序的响应速度,通常对第二输入操作进行实时监听。
其中,应用程序窗口可以包括应用程序的以下中的一种或多种:主窗口、子窗口、系统托盘图标,以及窗口控件等。
在步骤S340中,响应于监测到第二输入操作,通过虚拟机操作系统向应用程序发送通知消息。通知消息用于通知应用程序处理第二输入操作。
虚拟机可以通过与宿主机通信获取监测到的第二输入操作。作为一种实现方式,响应于该第二输入操作,虚拟机可以调用视窗系统接口将第二输入操作以通知消息的形式发送给应用程序。例如,可以将第二输入操作通过视窗系统透传给应用程序的应用程序窗口或系统托盘图标。
如果应用程序接收到通知消息,则可以对第二输入操作进行处理。例如,可以进行与第二输入操作对应的计算逻辑处理,也可以根据计算逻辑的处理结果更新应用程序窗口。
进一步地,对于第二输入操作的处理,还包括响应于虚拟机中应用程序窗口的变化,更新宿主机桌面中应用程序的应用程序窗口。
本申请实施例通过将虚拟机中应用程序的应用程序窗口绘制在宿主机桌面上,同时绘制在宿主机桌面中的应用程序窗口具有接收输入操作的属性,能够将应用程序使用过程中的应用程序窗口完整的融合在宿主机桌面上,使得虚拟机中的应用程序获得和宿主机中应用程序几乎相同的用户体验。
图4给出了图2中应用程序窗口融合在宿主机桌面的示意图。可以看出,应用程序窗口的显示区域为宿主机桌面110a,不再受虚拟机桌面区域的限制,而且该应用程序的可以获得类似宿主机桌面应用程序的使用体验。
前文提到的宿主机操作系统与虚拟机操作系统可以为相同的操作系统,也可以为不同的操作系统。如果宿主机操作系统与虚拟机操作系统不同,应用程序可以与虚拟机操作系统兼容,且与宿主机操作系统不兼容。例如,宿主机操作系统为Windows操作系统,虚拟机为Linux操作系统,应用程序可以为Linux操作系统支持,而Windows操作系统不支持的应用程序。又如,宿主机操作系统为Linux操作系统,虚拟机为Windows操作系统,应用程序可以为Windows操作系统支持,而Linux操作系统不支持的应用程序。
在这种情况下,采用本申请实施例提供的处理方法能够使得无法在宿主机运行的应用程序获得与宿主机中的应用程序类似的使用感受,有助于提升用户体验。
应用程序的窗口处理方法,离不开宿主机和虚拟机之间的交互,而虚拟机与宿主机之间的交互可以通过代理实现。在一些实施例中,在虚拟机操作系统中可以运行着服务端程序,在宿主机操作系统中可以运行着客户端程序,虚拟机与宿主机之间的数据交互可以通过服务端程序与客户端程序之间的数据交互实现。例如,在窗口重定向过程中,通过虚拟机与宿主机之间的通信,可以将虚拟机中应用程序窗口的窗口信息发送给宿主机,使得宿主机根据该信息绘制出应用程序窗口。窗口重定向可以应用于应用程序安装以及运行过程。又如,在桌面实时同步的过程中,需要实时捕获宿主机桌面的背景图像,并将背景图像发送至虚拟机以进行背景填充,也就是说,虚拟机和宿主机需要实时进行宿主机桌面背景图像的交互。
宿主机和虚拟机之间的交互可以基于多种方式。例如,虚拟机和宿主机可以基于网络套接字进行通信。以通过服务端程序与客户端程序实现数据交互为例,作为一种实现方式,首先,服务端程序和客户端程序均需创建网络套接字,服务端程序通过网络套接字将数据报文传输到内核态的虚拟机网络协议栈进行处理,此过程中存在数据拷贝、网络报文解析、路由寻址等处理。然后协议栈将数据报文通过虚拟网口转发给宿主机网络协议栈处理,宿主机网络协议栈同样需要进行数据拷贝和网络报文解析后,再通过网络套接字将数据传递到客户端程序。客户端程序向服务端程序传递数据同理。
可以看出,桌面图像数据经过多层处理才能实现宿主机和虚拟机之间的交互,可能会存在数据的传输延时。对于桌面背景同步需求来说,时延越大,用户视觉看到的桌面背景和窗口透明区域图像可能存在不重合的情况,用户体验会受到影响。
又如,在桌面重定向的过程中,响应于应用程序窗口的输入操作,需要更新宿主机桌面的应用程序窗口,如果宿主机和虚拟机之间的传输时延太大,会降低应用程序窗口的更新速度,出现输入操作响应的延迟、卡顿,影响用户体验。
本申请实施例提出了基于共享内存实现宿主机和虚拟机交互的方式。前文提到,宿主机和虚拟机运行在同一台计算机内,仍以通过服务端程序与客户端程序实现数据交互为例,因此可以将宿主机的一段物理内存地址空间暴露给虚拟机使用,虚拟机中运行的服务端程序可直接通过该共享内存设备与宿主机中运行的客户端程序进行数据交互。服务端程序和客户端程序直接读写内存进行数据交互,避免了数据拷贝、网络协议栈多层报文解析、路由寻址等处理环节,减小了延时,有助于提升用户体验。
在宿主机桌面上绘制所述应用程序的应用程序窗口之前,需要从虚拟机桌面中识别应用程序窗口。在一些实施例中,通过应用程序进程ID查找应用程序窗口ID的方式识别应用程序窗口。但是,输入法窗口和系统托盘窗口,以及个别特殊应用启动的第三方进程或创建的窗口并非应用程序强相关的窗口,属于第三方应用程序窗口或桌面系统公共组件,通过应用程序进程ID可能无法识别上述窗口,从而造成应用程序窗口无法全部在宿主机桌面中显示的问题。
因此,本申请实施例提出了一种应用程序窗口的过滤方法,首先获取虚拟机的视窗系统的窗口信息;其次从视窗系统的窗口信息中滤除虚拟机操作系统自带的系统窗口信息,从而可以得到应用程序窗口的窗口信息。进一步地,根据应用程序窗口的窗口信息,在宿主机桌面上绘制应用程序窗口。
也就是说,通过从虚拟机的窗口中滤除与应用程序无关的窗口,例如,操作系统的系统自带的系统窗口和系统托盘图标(如操作系统的菜单、搜索栏菜单等),剩下的窗口均可以认为是与应用程序关联的窗口(包括应用程序自身的窗口、所有操作系统桌面在应用程序启动后新增的子窗口、与其相关的输入法、托盘等)。通过该方法保障了应用程序所有相关的窗口都可以在宿主机桌面显示,避免出现窗口遗漏的情况。
在接收到输入操作或者应用程序运行到某个状态时,应用程序窗口可能会发生变化,因此,可以对应用程序窗口的窗口信息进行监测。如果应用程序窗口的窗口信息发生变化,则在宿主机桌面上重新绘制应用程序窗口。
作为一种实现方式,可以将应用程序的窗口信息存储在宿主机的内存中,且虚拟机可以访问该内存。在实际使用中,可以定时获取虚拟机视窗系统中的当前窗口信息;比较当前窗口信息与内存中存储的窗口信息,以确定应用程序窗口的窗口信息是否发生改变。
作为一个示例,可以采用内存链表的方式存储应用程序的窗口信息。由于内存链表便于增加和删除的优点,使用内存链表存储应用程序的窗口信息,使得该信息相关的处理效率较高。在一些实施例中,使用内存链表的方式,查询和对比窗口和托盘信息变化的处理效率能控制在毫秒级。
需要说明的是,应用程序窗口可以包括与应用程序关联的窗口和托盘图标。应用程序的窗口信息可以包括与应用程序关联的窗口信息和托盘图标的信息。其中,窗口信息可以包括窗口的标题、大小、属性、ID、图像等信息,托盘图标信息可以包括图标的ID、消息ID、标题、图像等信息。
由于不同的操作系统平台下的应用程序窗口大部分是基于不同的图形库接口实现,在窗口风格、属性、样式、渲染等设计上会存在一些差异,因此,如果应用程序窗口包括透明窗口,而宿主机操作系统不支持透明渲染,则会导致透明窗口在宿主机操作系统桌面上显示成了黑块或黑边。
由于重定向模式下,虚拟机桌面的背景图像为黑色,也就是说,如果宿主机操作系统不支持透明渲染,在应用程序窗口重绘时会将透明部分对应的虚拟机桌面的背景图像映射在宿主机上,从而形成了黑边、黑块。
因此,为了解决不支持透明窗口渲染的问题,可以将宿主机桌面图像中透明窗口对应的区域填充在虚拟机桌面背景的相应位置,将应用程序的窗口堆叠在背景图像之上。为了简化操作,可以将宿主机桌面的整个背景图像作为虚拟机桌面的图像。作为一种实现方式,可以在虚拟机操作系统提供的虚拟机桌面上创建全屏无边框窗口;在全屏无边框窗口中填充宿主机桌面的桌面图像,得到虚拟机桌面的背景图像。
由于应用程序窗口是堆叠在背景图像上的,因此为了保障应用程序窗口的正常使用,可以将全屏无边窗口的属性设置为可支持鼠标、键盘等输入事件的透传,以使虚拟机桌面上应用程序的所有相关窗口都能接受到鼠标事件和拖拽事件等相关操作。
需要说明的是,宿主机桌面图像包括宿主机桌面上的其他应用程序的图标、托盘、窗口等,例如可以包括如图2中的应用程序图标111、应用程序图标112以及系统任务栏113。
在应用程序运行的过程中,宿主机桌面背景图像中也可能包括应用程序窗口,此时将宿主机背景图像填充在虚拟机桌面的话,背景图像中的应用程序窗口和虚拟机中的实际应用程序的窗口可能会出现重影。因此,在全屏无边框窗口中填充宿主机桌面的桌面图像之前,可以获取宿主机桌面的初始桌面图像(即可能包含应用程序窗口的桌面图像),然后从该初始桌面图像中裁剪应用程序窗口的窗口图像,可以得到用于填充虚拟机中全屏无边窗口的宿主机桌面的桌面图像。
为了方便使用,简化应用程序的处理方法,可以在应用程序启动后,定期将宿主机桌面图像填充至虚拟机桌面,无需监测是否出现透明窗口,以及宿主机操作系统是否不支持透明渲染。
图5给出了一种应用程序窗口处理方法的应用架构示意图。在一些实施例中,应用程序的窗口处理方法也可以称为应用程序窗口在宿主机桌面的融合方法。
参见图5,架构500包括宿主机510和虚拟机520,其中宿主机510可以包括宿主机桌面操作系统511、桌面融合客户端程序512、虚拟机管理程序513以及应用程序窗口集514。虚拟机520可以包括虚拟机桌面操作系统521、桌面融合服务端程序522以及应用程序523。另外宿主机桌面还包括硬件平台515。
宿主机510可以为一种安装了操作系统和虚拟机管理工具的计算机。虚拟机管理工具可以包括虚拟机管理程序513、桌面融合客户端程序512等。
虚拟机管理程序513为一种通过调用宿主机操作系统系统调用接口,以在宿主机上配置、创建、维护虚拟机的应用程序。虚拟机520可以为利用虚拟机管理工具构造出来的虚拟计算机,它本质上可以是运行于宿主机操作系统中的一个进程。
桌面操作系统为一种运行于硬件平台之上的系统软件,可以负责对硬件资源初始化和管理,并为应用层软件提供系统调用接口,以及图形化桌面运行环境。在本申请实施例中,宿主机桌面操作系统511是指在虚拟化场景中物理机运行的桌面操作系统,而虚拟机桌面操作系统521是指在虚拟化场景中虚拟机运行的桌面操作系统。
桌面融合客户端程序512为一种运行在宿主机桌面操作系统上的计算机应用程序,可以负责桌面融合功能在宿主机操作系统上的具体实现。例如可以包括前文提到的,在宿主机桌面上进行窗口重绘时采用的窗口重定向技术,也可以包括将宿主机桌面同步到虚拟机桌面等客户端任务。桌面融合客户端程序512可以通过虚拟机桌面操作系统与桌面融合服务端程序522进行数据交互。
桌面融合服务端程序522为一种运行在虚拟机桌面操作系统上的计算机应用程序,可以负责桌面融合功能在虚拟机操作系统上的具体实现,例如可以包括窗口重定向和桌面同步等服务端任务。桌面融合服务端程序522可以与应用程序523进行数据交互。
应用程序523可以为一种与宿主机桌面操作系统不兼容,但是与虚拟机桌面操作系统兼容的应用程序,应用程序窗口集514和计算逻辑共同构成一个完整的应用程序。应用程序窗口集514为一种负责应用程序人机交互的窗口集合,可以包括该应用程序的主窗口、子窗口、系统托盘图标,窗口控件等组件。
硬件平台515为一种包括计算资源、网络资源和存储资源的计算机硬件系统,可以为宿主机和虚拟机的运行提供硬件支持。硬件平台可以包括中央处理器单元(CPU)、内存、磁盘、网卡、显卡、显示器、鼠标、键盘等组件。硬件平台515可以与宿主机桌面操作系统511进行数据交互。
下文以应用程序与虚拟机操作系统兼容,与宿主机操作系统不兼容为例,结合图5中的架构对本申请实施例提供的应用程序窗口处理方法进行详细介绍。
图6给出了一种应用程序的操作方法的流程示意图。方法600应用于在虚拟机中运行的应用程序。
参见图6,方法600包括步骤S610至步骤S660。
在步骤S610,启动宿主机。
给宿主机上电,以启动宿主机桌面操作系统。
在步骤S620,安装虚拟机。
进入宿主机操作系统桌面,控制虚拟机管理程序创建一台虚拟机,虚拟机桌面操作系统兼容用户所需运行的应用程序。
在步骤S630,安装桌面融合服务端程序。
进入虚拟机桌面,安装并运行桌面融合服务端程序。后续启动虚拟机,该服务端程序可以跟随虚拟机自动运行。
在步骤S640,安装桌面融合客户端程序。
进入宿主机桌面,安装并运行桌面融合客户端程序。
在步骤S650,运行应用程序。
在宿主机桌面上,运行虚拟机中应用程序有两种方式。
一种方式是,在宿主机视窗系统下运行应用程序安装程序,宿主机可以自动识别该安装程序后缀,并调用桌面融合客户端程序进行安装。此时客户端程序会与运行在虚拟机中的桌面融合服务端程序进行通信,通过在宿主机桌面上的人机交互可以完成应用程序在虚拟机中的安装。安装完成后,服务端可以通知客户端在宿主机桌面上创建该应用程序的快捷方式,在宿主机桌面点击虚拟应用快捷方式图标即可运行安装好的应用程序。
另一种方式是,进入虚拟机视窗系统,运行应用程序安装程序,通过在虚拟机桌面上的人机交互完成应用程序在虚拟机中的安装。安装完成后,服务端可以通知客户端在宿主机桌面上创建该应用程序的快捷方式,在宿主机桌面点击应用程序快捷方式图标即可运行安装好的应用程序。
上述两种方式的区别在于应用程序的安装方式不同,但是都是通过在宿主机桌面运行应用程序快捷方式,触发桌面融合客户端程序将应用程序窗口集重定向到宿主机桌面上,供用户使用。
在步骤S660,终止运行应用程序。
在宿主机桌面上,关闭应用程序主窗口或点击退出按钮,应用程序将在虚拟机中终止运行。
宿主机桌面和虚拟机桌面相互隔离,窗口显示和用户操作存在差异,虚拟机桌面是独立的显示操作窗口,造成鼠标键盘作用范围受到限制,虚拟机桌面和宿主机桌面切换需要特殊的操作,给用户使用造成了障碍。本申请实施例通过将应用程序的窗口重绘在宿主机桌面,也就是说支持应用程序计算逻辑运行在虚拟机中,而应用程序人机交互操作窗口运行在宿主机桌面,解决了用户使用障碍问题。
图7给出了一种在宿主机桌面绘制应用程序窗口的方法流程示意图。方法700可以采用窗口重定向技术实现宿主机桌面中应用程序窗口的绘制,其中应用程序窗口包括应用程序安装过程以及运行过程中的应用程序窗口。
参见图7,方法700包括步骤S701至步骤S713,该方法可以基于虚拟机服务端与宿主机客户端之间交互实现。
在步骤S701,点击安装程序或应用程序的快捷方式。
在宿主机视窗系统下点击运行安装程序或应用程序快捷方式时,宿主机客户端可以收集安装程序或应用程序在虚拟机中的执行文件路径。
在步骤S702,发送运行应用程序请求。
宿主机客户端可以基于窗口重定向协议将步骤S701中收集的文件路径发送给虚拟机服务端。
在步骤S703,运行应用程序。
虚拟机服务端收到运行应用程序的请求消息,可以基于文件路径信息执行应用程序。
在步骤S704,定时过滤无关窗口和系统托盘图标。
虚拟机服务端窗口监控任务可以定时捕获虚拟机视窗系统中的所有窗口,以获得应用程序的窗口。例如,可以从虚拟机视窗系统的所有窗口中过滤掉操作系统自带的系统窗口和系统托盘图标,将其他窗口和系统托盘图标作为应用程序的窗口。窗口信息包括窗口的标题、大小、属性、ID、图像等信息。托盘图标信息包括图标的ID、消息ID、标题、图像等信息。作为一种实现方式,可以将应用程序的窗口信息存储至内存链表。
在步骤S705,发送变化的窗口、系统托盘图标等信息。
虚拟机服务端将存储到内存链表的窗口和系统托盘图标信息通过窗口重定向协议发送到宿主机客户端。
在步骤S706,重绘窗口和系统托盘图标。
宿主机客户端收到步骤S705发送的信息,可以进行窗口和系统托盘图标的重绘。至此,应用程序的窗口集融合到宿主机桌面,并支持人机交互。
在步骤S707,接收窗口和托盘图标区域的鼠标和键盘事件。
宿主机客户端基于视窗系统接口实时监听虚拟应用窗口或系统托盘图标的输入事件,如鼠标和键盘事件。
在步骤S708,发送鼠标和键盘事件。
宿主机客户端可以将鼠标和键盘事件通过窗口重定向协议发送给虚拟机服务端。
在步骤S709,将鼠标和键盘事件透传给应用程序窗口或系统托盘图标。
虚拟机服务端收到鼠标和键盘事件后,可以调用视窗系统接口将其透传给对应的应用程序窗口或系统托盘图标。
在步骤S710,应用程序响应输入事件。
响应于鼠标和键盘事件,应用程序可以进行应用程序相关计算逻辑的处理,并更新窗口和系统托盘图标显示状态。其中,应用程序相关计算逻辑的处理可以基于虚拟机的资源。
在步骤S711,定时更新窗口和系统托盘图标信息。
虚拟机服务端窗口监控任务将定时捕获虚拟机视窗系统中的所有窗口,并从中过滤掉操作系统自带的系统窗口和系统托盘图标。将过滤结果与步骤S704中存储在内存链表的信息,进行比对过滤,如果过滤结果是新窗口或旧窗口属性变化,则更新内存链表。
在步骤S712,发送变化的窗口、系统托盘图标等信息。
同时虚拟机服务端将步骤S711中的对比结果中包含的有变化的窗口和系统托盘图标信息发送给宿主机客户端,例如可以基于窗口重定向协议发送给宿主机客户端。
在步骤S713,更新窗口和系统托盘图标。
宿主机客户端收到在步骤S712发送的信息,进行窗口和系统托盘图标的重绘。
本申请实施例中,宿主机和虚拟机基于窗口重定义协议进行通信。虚拟机桌面融合服务端收到宿主机客户端运行应用程序请求后,在虚拟机中运行应用程序,并将应用程序的窗口集和系统托盘图标通过过滤推送算法处理后,发送给宿主机桌面融合客户端。客户端程序根据接收到的信息,重绘应用程序的窗口集和系统托盘图标,实现了虚拟机应用程序到宿主机桌面的窗口重定向,进而实现了不同操作系统之间的桌面融合。
通过上述应用程序窗口的过滤推送方法,可以避免窗口重绘过程中遗漏应用程序窗口。图8给出了一种窗口过滤推送方法的流程示意图。系统托盘图标的方法与其类似,此处不再赘述。
参见图8,方法800包括步骤S810至步骤S860。
在步骤S810,定时器是否到期。
等待定时器到期,定时器的时间可以根据捕获宿主机窗口的时间间隔确定。如果定时器到期则执行步骤S820。
在步骤S820,判断系统窗口句柄是否为空。
遍历系统所有窗口句柄,如果句柄为空,则跳转至步骤S810,如果句柄不为空,则跳转至步骤S830。
在一些实施例中,窗口句柄可以由系统为窗口分配,窗口句柄中可以包含窗口标识。
在步骤S830,获取窗口信息。
作为一种实现方式,可以通过窗口句柄中的窗口标识等内容,获取窗口信息。
在步骤S840,判断窗口信息是否为应用程序窗口的窗口信息。
如果窗口信息为应用程序窗口的窗口信息,则跳转至步骤S850;如果窗口信息不是应用程序窗口的窗口信息,则跳转至步骤S820。
在步骤S850,判断该窗口信息是否指示窗口为新建窗口或旧窗口发生属性变化。
如果窗口信息指示该窗口为新建窗口或旧窗口发生属性变化,则跳转至步骤S860;如果窗口信息指示该窗口为旧窗口,则跳转至步骤S820。
在步骤S860,在宿主机重绘窗口。
由于窗口信息指示该窗口为新建窗口或旧窗口发生属性变化,因此可以在宿主机桌面中重绘新建窗口或发生属性变化的旧窗口。在重绘窗口之后,可以跳转至步骤S820。
本申请实施例通过定时监控虚拟机系统中所有窗口和系统托盘图标的变化,将过滤掉操作系统自带的窗口子集和托盘图标子集后剩下的窗口和系统托盘图标子集全部重定向到宿主机桌面,避免了基于应用程序进程ID查找应用程序相关窗口ID的方式遗漏窗口的问题。
应用程序窗口中有时会包括透明窗口,但是在一些情况下,例如虚拟机桌面支持透明窗口属性,而宿主机桌面可能不支持透明窗口属性,应用程序的透明窗口重绘在宿主机桌面时会出现黑边、黑框等显示问题。图9给出了一种桌面实时同步方法,以解决透明窗口不兼容的问题。
参见图9,方法900包括步骤S910至步骤S970,该方法可以基于虚拟机服务端与宿主机客户端之间交互实现。
在步骤S910,创建一个全屏无边窗口。
虚拟机服务端可以创建一个全屏无边窗口,窗口属性配置为支持鼠标事件透传,接受窗口拖拽等属性。
在步骤S920,定期捕获宿主机桌面图像。
宿主机客户端桌面捕获任务可以定时捕获初始宿主机桌面图像,并根据当前已重定向的虚拟应用窗口的区域大小信息,裁剪掉虚拟应用窗口区域,得到宿主机桌面图像。如此一来,可以避免传送到虚拟机后导致窗口重影的问题。
在步骤S930,发送宿主机桌面图像。
宿主机客户端可以将步骤S920裁剪后的宿主机桌面图像通过内存共享方式传递给虚拟机服务端。
在步骤S940,将宿主机桌面图像作为背景填充到全屏无边窗口。
虚拟机服务端可以将收到的宿主机桌面图像作为背景图像填充到步骤S910创建的全屏无边窗口中。
在步骤S950,将全屏无边窗口作为新的桌面背景,并基于该背景绘制应用程序窗口。
虚拟机将步骤S940得到的全屏无边窗口作为背景,并将应用程序的窗口集堆叠在该背景窗口之上。如此一来,如果应用程序窗口属性存在透明属性,窗口透明区域显示的将是宿主机桌面图像。
在步骤S960,发送变化的窗口、系统托盘图标等信息。
虚拟机服务端将窗口或系统托盘图标更新信息发送到宿主机客户端;其中包括经过步骤S950窗口透明属性处理后的窗口图像。
在步骤S970,重绘窗口和系统托盘图标。
宿主机客户端基于步骤S960传送的信息重绘有变化的应用程序窗口和系统托盘图标。
为了更加详细的描述桌面同步方法900,以宿主机桌面不支持透明窗口,且采用窗口重定向技术进行窗口重绘为例,下文结合图10和图11对该方法进行详细的描述。图10为未使用桌面同步方法的透明窗口绘制结果示意图。图11为使用桌面同步方法的透明窗口绘制结果示意图。
参见图10,虚拟机桌面1020中应用程序的窗口包括窗口1021和窗口1022,宿主机桌面1010中应用程序的窗口包括窗口1011和窗口1012,窗口1011和窗口1012分别为窗口1021和窗口1022重绘之后对应的窗口。
由于虚拟机桌面在窗口重定向模式下,桌面背景默认为黑色,虚拟机桌面中应用程序创建带透明边框的窗口或透明窗口,其透明部分将跟随虚拟机桌面背景色显示成黑色边框,因此,当上述窗口重定向到宿主机桌面后,会出现如窗口1011和窗口1012中的黑边和黑块问题。
参见图11,虚拟机桌面1120中应用程序的窗口包括窗口1121、窗口1122以及全屏无边窗口1123,窗口1121和窗口1122堆叠在全屏无边窗口1123上。采用上述桌面实时同步方法对窗口1121和窗口1122进行重绘,可以得到宿主机桌面1110中应用程序的窗口1111和窗口1112。
可以看出,采用上述桌面实时同步方法进行窗口重绘,虚拟机桌面中应用程序创建的带透明边框的窗口或透明窗口,其透明部分将跟随宿主机桌面背景显示为宿主机桌面对应区域的图像,因此,当上述窗口重定向至宿主机桌面,就不会出现窗口黑边和黑块的现象(如窗口1111和窗口1112)。
本申请实施例通过在虚拟机操作系统桌面上创建了一个无边框全屏窗口(用于充当虚拟机操作系统桌面背景),并将宿主机桌面图像填充至该窗口,使得透明窗口在重定向到目的操作系统桌面之前,将透明窗口区域图像提前替换成了宿主机操作系统桌面背景图像。如此一来,当带有透明属性的窗口重定向到宿主机操作系统桌面后,看起来“像是”宿主机操作系统桌面下的透明效果,最终实现虚拟机应用程序窗口集在宿主机桌面上正常显示,避免了黑边、黑块等问题。
本申请实施例提供的应用程序窗口处理方法基于宿主机和虚拟机之间的数据交互实现。例如,在窗口重定向过程中,通过虚拟机与宿主机之间的通信,可以将虚拟机中应用程序窗口的窗口信息发送给宿主机,使得宿主机根据该信息绘制出应用程序窗口。窗口重定向可以应用于应用程序安装以及运行过程。又如,在桌面实时同步的过程中,需要实时捕获宿主机桌面的背景图像,并将背景图像发送至虚拟机以进行背景填充,也就是说,虚拟机和宿主机需要实时进行宿主机桌面背景图像的交互。
以桌面背景同步为例,对宿主机与虚拟机之间的通信方式进行介绍。图12给出了一种基于网络套接字的通信方式示意图。
参见图12,该通信方式的实现过程中需要虚拟机中的桌面服务端、虚拟机网络协议栈以及宿主机中的桌面客户端、宿主机网络协议栈以及虚拟网卡共同完成。
首先,服务端和客户端均需创建网络套接字。作为一种实现方式,服务端与客户端之间交换数据时,服务端可以通过网络套接字将数据报文传输到内核态的虚拟机网络协议栈进行处理,此过程中存在数据拷贝、网络报文解析、路由寻址等处理。协议栈将数据报文通过虚拟网口转发给宿主机网络协议栈处理,宿主机网络协议栈同样需要进行数据拷贝和网络报文解析后,再通过网络套接字将数据传递到客户端。
客户端向服务端传递数据与上述服务端向客户端传递数据原理相同,此处不再赘述。
可以看出,桌面图像数据经过多层处理才能实现宿主机和虚拟机之间的交互,可能会存在数据的传输延时。对于桌面背景同步需求来说,时延越大,用户视觉看到的桌面背景和窗口透明区域图像可能存在不重合的情况,用户体验会受到影响。
又如,在桌面重定向的过程中,响应于应用程序窗口的输入操作,需要更新宿主机桌面的应用程序窗口,如果宿主机和虚拟机之间的传输时延太大,会降低应用程序窗口的更新速度,出现输入操作响应的延迟、卡顿,影响用户体验。
为了解决通信延迟的问题,可以将宿主机的一段物理内存地址空间暴露给虚拟机使用,虚拟机中运行的服务端程序可直接通过该共享内存设备与宿主机中运行的客户端程序进行数据交互。图13给出了一种基于共享内存的通信方式示意图。该通信方式中,虚拟机桌面服务端和宿主机桌面客户端可以直接读写内存进行数据交互,避免了数据拷贝、网络协议栈多层报文解析、路由寻址等处理环节,减小了延时,有助于提升用户体验。在桌面实时同步方法中,通过共享内存能够使得用户视觉看到的桌面背景和窗口透明区域图像更贴近重合,更接近本地应用程序窗口透明化处理的效果,提升了用户体验。
本申请实施例通过采用共享内存的方式建立宿主机和虚拟机之间的会话通道,该方式使得宿主机和虚拟机均能够直接基于内存进行数据交换,相比于通过网络协议栈进行数据交换,延时更小,性能更佳。减少窗口信息、输入事件、桌面背景同步等数据交换的延时,在人机交互体验效果上有明显提升。
需要说明的是,本申请实施例提供的应用程序窗口的处理方法,可以应用于飞腾D2000/FT2000/4桌面机和笔记本电脑。
除了前文中提到的宿主机和虚拟机应用的操作系统,该处理方法还可以应用于应用程序在当前计算机体系架构下无法使用的场景,例如,可以应用于应用程序只有x86架构版本,没有ARM架构版本的场景,也可以应用于应用程序只有ARM架构版本,没有x86架构版本的场景。
在一些实施例中,本申请实施例提供的应用程序窗口的处理方法还可以将远端计算机系统上的应用程序融合到本地计算机系统桌面使用。
上文结合图1至图13,详细描述了本申请的方法实施例,下面结合图14至图15,详细描述本申请的装置实施例。应理解,方法实施例的描述与装置实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。
图14为本申请实施例提供的一种应用程序窗口的处理设备的结构示意图。处理设备1400应用于宿主机,宿主机包括宿主机操作系统,宿主机操作系统中运行着虚拟机,虚拟机包括虚拟机操作系统。
参见图14,设备1400可以包括接收模块1410、第一绘制模块1420、第一监测模块1430和发送模块1440。
接收模块1410,用于接收用于启动所述虚拟机操作系统中的应用程序的第一输入操作。
第一绘制模块1420,用于响应于所述第一输入操作,在所述宿主机操作系统提供的宿主机桌面上绘制所述应用程序的应用程序窗口。
第一监测模块1430,用于在所述宿主机桌面上监测针对所述应用程序窗口的第二输入操作。
发送模块1440,用于响应于监测到所述第二输入操作,通过所述虚拟机操作系统向所述应用程序发送通知消息,所述通知消息用于通知所述应用程序处理所述第二输入操作。
可选地,所述应用程序与所述虚拟机操作系统兼容,且所述应用程序与所述宿主机操作系统不兼容。
可选地,所述虚拟机操作系统中运行着服务端程序,所述宿主机操作系统上运行着客户端程序,所述应用程序窗口在所述宿主机桌面的绘制是基于所述服务端程序与所述客户端程序之间的数据交互实现的,所述数据交互是基于所述虚拟机与所述宿主机之间的共享内存进行的。
可选地,所述在所述宿主机操作系统提供的宿主机桌面上绘制所述应用程序窗口,包括:获取所述虚拟机的视窗系统的窗口信息;从所述视窗系统的窗口信息中滤除所述虚拟机操作系统自带的系统窗口信息,得到所述应用程序窗口的窗口信息;根据所述应用程序窗口的窗口信息,在所述宿主机桌面上绘制所述应用程序窗口。
可选地,所述处理方法还包括:监测所述应用程序窗口的窗口信息的变化;响应于所述应用程序窗口的窗口信息发生变化,在所述宿主机桌面上重新绘制所述应用程序窗口。
可选地,所述宿主机包括内存,所述内存为所述虚拟机能够访问的内存,且所述内存用于存储所述应用程序窗口的窗口信息,所述监测所述应用程序窗口的窗口信息的变化,包括:定时获取所述视窗系统中的当前窗口信息;比较所述当前窗口信息与所述内存中存储的所述窗口信息,以确定所述应用程序窗口的窗口信息是否发生改变。
可选地,所述处理方法还包括:在所述虚拟机操作系统提供的虚拟机桌面上创建全屏无边框窗口;在所述全屏无边框窗口中填充所述宿主机桌面的桌面图像,得到所述虚拟机桌面的背景图像。
可选地,所述在所述全屏无边框窗口中填充所述宿主机桌面的桌面图像之前,所述处理方法还包括:获取所述宿主机桌面的初始桌面图像;从所述初始桌面图像中裁剪所述应用程序窗口的窗口图像,得到所述宿主机桌面的桌面图像。
可选地,所述应用程序窗口包括所述应用程序的以下中的一种或多种:主窗口、子窗口、系统托盘图标,以及窗口控件。
图15为本申请实施例提供的一种计算机的结构示意图。图15所示计算机1500可以包括存储器1510和处理器1520。存储器1510可用于存储可执行代码。处理器1520可用于执行所述存储器1510中存储的可执行代码,以实现前文描述的各个方法中的步骤。在一些实施例中,计算机1500还可以包括网络接口1530,处理器1520与外部设备的数据交换可以通过该网络接口1530实现。
应理解,本申请实施例中,该处理器可以为中央处理单元(central processingunit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(digital signalprocessor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
应理解,在本申请实施例中,“与A相应的B”表示B与A相关联,根据A可以确定B。但还应理解,根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其它信息确定B。
应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够读取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(digital video disc,DVD))或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (20)
1.一种应用程序窗口的处理方法,其特征在于,所述方法应用于宿主机,所述宿主机包括宿主机操作系统,所述宿主机操作系统中运行着虚拟机,所述虚拟机包括虚拟机操作系统,
所述方法包括:
接收用于启动所述虚拟机操作系统中的应用程序的第一输入操作;
响应于所述第一输入操作,在所述宿主机操作系统提供的宿主机桌面上绘制所述应用程序的应用程序窗口;
在所述宿主机桌面上监测针对所述应用程序窗口的第二输入操作;
响应于监测到所述第二输入操作,通过所述虚拟机操作系统向所述应用程序发送通知消息,所述通知消息用于通知所述应用程序处理所述第二输入操作。
2.根据权利要求1所述的处理方法,其特征在于,所述应用程序与所述虚拟机操作系统兼容,且所述应用程序与所述宿主机操作系统不兼容。
3.根据权利要求1所述的处理方法,其特征在于,所述虚拟机操作系统中运行着服务端程序,所述宿主机操作系统中运行着客户端程序,所述应用程序窗口在所述宿主机桌面的绘制是基于所述服务端程序与所述客户端程序之间的数据交互实现的,所述数据交互是基于所述虚拟机与所述宿主机之间的共享内存进行的。
4.根据权利要求1-3中任一项所述的处理方法,其特征在于,所述在所述宿主机操作系统提供的宿主机桌面上绘制所述应用程序窗口,包括:
获取所述虚拟机的视窗系统的窗口信息;从所述视窗系统的窗口信息中滤除所述虚拟机操作系统自带的系统窗口信息,得到所述应用程序窗口的窗口信息;
根据所述应用程序窗口的窗口信息,在所述宿主机桌面上绘制所述应用程序窗口。
5.根据权利要求4所述的处理方法,其特征在于,所述处理方法还包括:
监测所述应用程序窗口的窗口信息的变化;
响应于所述应用程序窗口的窗口信息发生变化,在所述宿主机桌面上重新绘制所述应用程序窗口。
6.根据权利要求5所述的处理方法,其特征在于,所述宿主机包括内存,所述内存为所述虚拟机能够访问的内存,且所述内存用于存储所述应用程序窗口的窗口信息,
所述监测所述应用程序窗口的窗口信息的变化,包括:
定时获取所述视窗系统中的当前窗口信息;
比较所述当前窗口信息与所述内存中存储的所述窗口信息,以确定所述应用程序窗口的窗口信息是否发生改变。
7.根据权利要求1-3中任一项所述的处理方法,其特征在于,所述处理方法还包括:
在所述虚拟机操作系统提供的虚拟机桌面上创建全屏无边框窗口;
在所述全屏无边框窗口中填充所述宿主机桌面的桌面图像,得到所述虚拟机桌面的背景图像。
8.根据权利要求7所述的处理方法,其特征在于,所述在所述全屏无边框窗口中填充所述宿主机桌面的桌面图像之前,所述处理方法还包括:
获取所述宿主机桌面的初始桌面图像;
从所述初始桌面图像中裁剪所述应用程序窗口的窗口图像,得到所述宿主机桌面的桌面图像。
9.根据权利要求1-3中任一项所述的处理方法,其特征在于,所述应用程序窗口包括所述应用程序的以下中的一种或多种:主窗口、子窗口、系统托盘图标,以及窗口控件。
10.一种应用程序窗口的处理设备,其特征在于,所述处理设备应用于宿主机,所述宿主机包括宿主机操作系统,所述宿主机操作系统中运行着虚拟机,所述虚拟机包括虚拟机操作系统,
所述处理设备包括:
接收模块,用于接收用于启动所述虚拟机操作系统中的应用程序的第一输入操作;
第一绘制模块,用于响应于所述第一输入操作,在所述宿主机操作系统提供的宿主机桌面上绘制所述应用程序的应用程序窗口;
第一监测模块,用于在所述宿主机桌面上监测针对所述应用程序窗口的第二输入操作;
发送模块,用于响应于监测到所述第二输入操作,通过所述虚拟机操作系统向所述应用程序发送通知消息,所述通知消息用于通知所述应用程序处理所述第二输入操作。
11.根据权利要求10所述的处理设备,其特征在于,所述应用程序与所述虚拟机操作系统兼容,且所述应用程序与所述宿主机操作系统不兼容。
12.根据权利要求10所述的处理设备,其特征在于,所述虚拟机操作系统中运行着服务端程序,所述宿主机操作系统中运行着客户端程序,所述应用程序窗口在所述宿主机桌面的绘制是基于所述服务端程序与所述客户端程序之间的数据交互实现的,所述数据交互是基于所述虚拟机与所述宿主机之间的共享内存进行的。
13.根据权利要求10-12中任一项所述的处理设备,其特征在于,所述第一绘制模块用于:
获取所述虚拟机的视窗系统的窗口信息;
从所述视窗系统的窗口信息中滤除所述虚拟机操作系统自带的系统窗口信息,得到所述应用程序窗口的窗口信息;
根据所述应用程序窗口的窗口信息,在所述宿主机桌面上绘制所述应用程序窗口。
14.根据权利要求13所述的处理设备,其特征在于,所述处理设备还包括:
第二监测模块,用于监测所述应用程序窗口的窗口信息的变化;
第二绘制模块,用于响应于所述应用程序窗口的窗口信息发生变化,在所述宿主机桌面上重新绘制所述应用程序窗口。
15.根据权利要求14所述的处理设备,其特征在于,所述宿主机包括内存,所述内存为所述虚拟机能够访问的内存,且所述内存用于存储所述应用程序窗口的窗口信息,
所述第二监测模块用于:
定时获取所述视窗系统中的当前窗口信息;
比较所述当前窗口信息与所述内存中存储的所述窗口信息,以确定所述应用程序窗口的窗口信息是否发生改变。
16.根据权利要求10-12中任一项所述的处理设备,其特征在于,所述处理设备还包括:
创建模块,用于在所述虚拟机操作系统提供的虚拟机桌面上创建全屏无边框窗口;
填充模块,用于在所述全屏无边框窗口中填充所述宿主机桌面的桌面图像,得到所述虚拟机桌面的背景图像。
17.根据权利要求16所述的处理设备,其特征在于,所述处理设备还包括:
获取模块,用于在所述全屏无边框窗口中填充所述宿主机桌面的桌面图像之前,获取所述宿主机桌面的初始桌面图像;
裁剪模块,用于从所述初始桌面图像中裁剪所述应用程序窗口的窗口图像,得到所述宿主机桌面的桌面图像。
18.根据权利要求10-12中任一项所述的处理设备,其特征在于,所述应用程序窗口包括所述应用程序的以下中的一种或多种:主窗口、子窗口、系统托盘图标,以及窗口控件。
19.一种计算机,其特征在于,包括:
存储器,用于存储程序;
处理器,用于调用所述存储器中的程序,以执行如权利要求1-9中任一项所述的方法。
20.一种计算机可读存储介质,其特征在于,其上存储有程序,所述程序使得计算机执行如权利要求1-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211673554.9A CN115658216B (zh) | 2022-12-26 | 2022-12-26 | 应用程序窗口的处理方法、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211673554.9A CN115658216B (zh) | 2022-12-26 | 2022-12-26 | 应用程序窗口的处理方法、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115658216A true CN115658216A (zh) | 2023-01-31 |
CN115658216B CN115658216B (zh) | 2023-03-31 |
Family
ID=85022731
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211673554.9A Active CN115658216B (zh) | 2022-12-26 | 2022-12-26 | 应用程序窗口的处理方法、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115658216B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117591246A (zh) * | 2024-01-18 | 2024-02-23 | 杭州优云科技股份有限公司 | 一种kvm虚拟机web终端的实现方法和装置 |
CN117724797A (zh) * | 2024-02-18 | 2024-03-19 | 北京麟卓信息科技有限公司 | 一种基于异构混合渲染的自由缩放优化方法 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105302569A (zh) * | 2015-11-18 | 2016-02-03 | 网易(杭州)网络有限公司 | 一种用于生成异形窗口的方法和装置 |
CN111459589A (zh) * | 2020-03-30 | 2020-07-28 | 深信服科技股份有限公司 | 重定向处理方法、虚拟桌面基础架构及可读存储介质 |
CN111602381A (zh) * | 2018-07-02 | 2020-08-28 | 华为技术有限公司 | 一种图标切换方法、显示gui的方法及电子设备 |
CN113778611A (zh) * | 2021-07-06 | 2021-12-10 | 锐捷网络(苏州)有限公司 | 数据传输方法、装置、系统及存储介质 |
CN114238877A (zh) * | 2021-12-15 | 2022-03-25 | 湖南麒麟信安科技股份有限公司 | 云桌面的水印生成方法、装置及电子设备 |
CN114880072A (zh) * | 2022-05-10 | 2022-08-09 | 统信软件技术有限公司 | 一种虚拟机的应用窗口显示方法、计算设备及存储介质 |
CN115357340A (zh) * | 2022-08-19 | 2022-11-18 | 麒麟软件有限公司 | 一种提高虚拟设备性能的装置和方法 |
CN115495193A (zh) * | 2021-06-19 | 2022-12-20 | 广东微云科技股份有限公司 | Linux操作系统下的应用程序运行方法及其系统 |
-
2022
- 2022-12-26 CN CN202211673554.9A patent/CN115658216B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105302569A (zh) * | 2015-11-18 | 2016-02-03 | 网易(杭州)网络有限公司 | 一种用于生成异形窗口的方法和装置 |
CN111602381A (zh) * | 2018-07-02 | 2020-08-28 | 华为技术有限公司 | 一种图标切换方法、显示gui的方法及电子设备 |
CN111459589A (zh) * | 2020-03-30 | 2020-07-28 | 深信服科技股份有限公司 | 重定向处理方法、虚拟桌面基础架构及可读存储介质 |
CN115495193A (zh) * | 2021-06-19 | 2022-12-20 | 广东微云科技股份有限公司 | Linux操作系统下的应用程序运行方法及其系统 |
CN113778611A (zh) * | 2021-07-06 | 2021-12-10 | 锐捷网络(苏州)有限公司 | 数据传输方法、装置、系统及存储介质 |
CN114238877A (zh) * | 2021-12-15 | 2022-03-25 | 湖南麒麟信安科技股份有限公司 | 云桌面的水印生成方法、装置及电子设备 |
CN114880072A (zh) * | 2022-05-10 | 2022-08-09 | 统信软件技术有限公司 | 一种虚拟机的应用窗口显示方法、计算设备及存储介质 |
CN115357340A (zh) * | 2022-08-19 | 2022-11-18 | 麒麟软件有限公司 | 一种提高虚拟设备性能的装置和方法 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117591246A (zh) * | 2024-01-18 | 2024-02-23 | 杭州优云科技股份有限公司 | 一种kvm虚拟机web终端的实现方法和装置 |
CN117591246B (zh) * | 2024-01-18 | 2024-05-03 | 杭州优云科技股份有限公司 | 一种kvm虚拟机web终端的实现方法和装置 |
CN117724797A (zh) * | 2024-02-18 | 2024-03-19 | 北京麟卓信息科技有限公司 | 一种基于异构混合渲染的自由缩放优化方法 |
CN117724797B (zh) * | 2024-02-18 | 2024-04-09 | 北京麟卓信息科技有限公司 | 一种基于异构混合渲染的自由缩放优化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115658216B (zh) | 2023-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115658216B (zh) | 应用程序窗口的处理方法、设备及计算机可读存储介质 | |
JP7263442B2 (ja) | モバイルアプリケーションのリアルタイム遠隔制御のためのシステムおよび方法 | |
US11513609B2 (en) | Remoting or localizing touch gestures | |
US11726736B2 (en) | System to facilitate interaction during a collaborative screen sharing session | |
US10116525B2 (en) | Extensible infrastructure for representing networks including virtual machines | |
US9927958B2 (en) | User interface for networks including virtual machines | |
US11385930B2 (en) | Automatic workflow-based device switching | |
US9977698B2 (en) | Virtual machine migration into the cloud | |
US11249788B2 (en) | Cloud management platform, and virtual machine management method and system | |
US10831331B2 (en) | Window control for simultaneously running applications | |
US10223219B2 (en) | Managing network failure using back-up networks | |
US10178170B2 (en) | Browser-based virtual media administration | |
WO2016202102A1 (zh) | 消息传输方法及装置 | |
CN105700944A (zh) | 虚拟机没有共享存储条件下的在线迁移方法和装置 | |
CN114510170B (zh) | 一种组件展示方法及显示设备 | |
CN108255547B (zh) | 一种应用程序控制方法及装置 | |
US20160110045A1 (en) | User interface module sharing | |
US11722550B2 (en) | Sharing an input device between remote desktops of multiple client devices | |
US11893411B2 (en) | System and method for resource optimized intelligent product notifications | |
CN113727056A (zh) | 一种数据传输连接的管理方法及服务器 | |
KR101326231B1 (ko) | 가상화 소프트웨어 서비스 시스템 및 이를 위한 서비스 서버 및 사용자단말 | |
CN113760215B (zh) | 基于鸿蒙系统的多终端显示数据传输方法、设备及介质 | |
KR20230165086A (ko) | Rpa 태스크의 레코딩 및 실행 방법 | |
CN113873315A (zh) | 一种视频数据播放方法、装置及设备 | |
CN115495170A (zh) | 应用启动方法、终端设备、服务端及计算机存储介质 |
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 |