CN114138150B - Windows平台下第三方APP原生集成的方法 - Google Patents
Windows平台下第三方APP原生集成的方法 Download PDFInfo
- Publication number
- CN114138150B CN114138150B CN202210109856.7A CN202210109856A CN114138150B CN 114138150 B CN114138150 B CN 114138150B CN 202210109856 A CN202210109856 A CN 202210109856A CN 114138150 B CN114138150 B CN 114138150B
- Authority
- CN
- China
- Prior art keywords
- pipeline
- app
- interactive system
- workstation
- instruction
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
- G06F3/0482—Interaction with lists of selectable items, e.g. menus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0487—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser
- G06F3/0488—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04M—TELEPHONIC COMMUNICATION
- H04M1/00—Substation equipment, e.g. for use by subscribers
- H04M1/72—Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
- H04M1/724—User interfaces specially adapted for cordless or mobile telephones
- H04M1/72403—User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality
- H04M1/72406—User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality by software upgrading or downloading
Abstract
本发明实施例公开了一种Windows平台下第三方APP原生集成的方法,包括:步骤1:作为服务端的交互系统APP启动,创建服务端的交互管道服务;步骤2:点击交互系统APP的主界面上的文件打开菜单,就能选择计算机终端中的各路径下的文件;步骤3:选择结束后,就执行运行所选择的文件关联的第三方APP的流程;提高了系统的稳定性,简化上层应用集成,更好的适配软件的风格,做到更美观。
Description
技术领域
本发明涉及显示技术领域,尤指在Windows平台下第三方APP原生集成的方法。
背景技术
目前越来越多的会议、教学、培训、共享办公空间场景的多媒体交互系统,聚焦数字化、无线化、多媒体内容接入、多用户互动和协作,为企业会议,教学培训等提供高效、自由、协作的环境,以技术升级全面提高办公效率。在此环境下,在Windows平台下系统中集成第三方APP(包含运行视频、图片、OFFICE文档和PDF文档的如视频播放器、图片显示软件、AUTOCAD软件、会议软件和PDF阅读器等)的需求越来越强烈。在此应用中,需将打开的第三方APP完美显示并控制呈现位置和大小,并且可以通过手势触控和键盘鼠标对第三方APP进行原生控制。
但是目前市面上在Windows平台下的系统仅能完美的集成自身支持的有限的媒体类型,大多数运行视频、图片、OFFICE文档、CAD文档和PDF文档的如视频播放器、图片显示软件、OFFICE软件、AUTOCAD软件、会议软件和PDF阅读器这样的第三方APP只能独立打开,操作很不便利,在具有触摸屏的系统操作界面下更加明显。
现有技术的集成第三方APP打开的文件的系统的缺陷和不足:
1、集成第三方APP打开的文件的系统一般以转换图片的形式集成,无法保留原生第三方APP的特性(高清晰度、动画、墨迹等),无法对第三方APP打开的文件进行修改并保存;
2、软件不能捕获和处理第三方APP的报错窗口,也无法呈现给用户供用户操作;
3、第三方APP的多窗口无法正常呈现给用户;
4、不稳定,打开的第三方APP异常了也可能会影响当前系统的稳定性;
5、第三方APP只能独立呈现,软件风格不统一;
6、上层应用开发人员的工作量较大,集成难度较大。
发明内容
本发明实施例提供了一种Windows平台下第三方APP原生集成的方法,提高系统的稳定性,简化上层应用集成,更好的适配软件的风格,做到更美观。
本发明实施例提供了一种Windows平台下第三方APP原生集成的方法,包括:
步骤1:作为服务端的交互系统APP启动,创建服务端的交互管道服务;
进一步的,所述交互系统APP运行在具有Windows平台的计算机终端中,该计算机终端的显示屏可以是触摸屏,所述交互系统APP的主界面上具有文件打开菜单,点击所述文件打开菜单,就能选择计算机终端中的各路径下的文件。
所述步骤1具体包括:
步骤1-1:通过运行一个线程一来首先创建一个管道一;
步骤1-2:对管道一执行事件绑定,事件绑定包括针对工作站的请求连接的连接事件绑定、针对工作站断开时的断开事件绑定以及针对工作站传送来的数据的数据事件绑定,由此创建了服务端的交互管道服务;
步骤2:点击交互系统APP的主界面上的文件打开菜单,就能选择计算机终端中的各路径下的文件;
步骤3:选择结束后,就执行运行所选择的文件关联的第三方APP的流程;
所述步骤3具体包括:
步骤3-1:所述交互系统APP通过连接内核管道来创建工作站;
交互系统APP通过连接内核管道来创建工作站前,需要预先使用ImpersonateNamedPipeClient函数进行提权处理获得系统权限。
所述步骤3-1具体包括:
步骤3-1-1:在创建工作站时,使用 RpcWinStationOpenServer函数初始化RPC环境,RpcWinStationOpenServer 方法返回一个服务端句柄;
步骤3-1-2:用RpcWinStationConnect函数运用内核管道来创建新的工作站WinStation;
步骤3-2:作为客户端的工作站启动,运行APP SHELL模块来加载初始化组件;
进一步的,所述加载初始化组件的方法,具体包括:
加载IDD驱动和虚拟驱动模块Virtual HID Device;
加载IDD驱动和虚拟驱动模块Virtual HID Device的方式为
调用ZwLoadDriver函数来将IDD驱动和虚拟驱动模块Virtual HID Device加载到工作站;
所述IDD驱动为间接显示驱动程序;
所述虚拟驱动模块Virtual HID Device包括计算机终端的键盘的驱动程序、计算机终端的鼠标的驱动程序和计算机终端的触摸屏的驱动程序。
步骤3-3:所述APP SHELL模块创建客户端的交互管道服务;
所述步骤3-3具体包括:
步骤3-3-1:通过运行一个线程二来首先创建一个管道二;
步骤3-3-2:对管道二执行事件绑定,事件绑定包括连接上交互系统APP的连接绑定和针对交互系统APP传送来的数据的数据绑定,由此创建了客户端的交互管道服务;
步骤3-3-3:激活针对工作站的请求连接的连接事件绑定,即管道一对管道二发送请求连接指令;
步骤3-3-4:管道二接收到请求连接指令后,激活连接上交互系统APP的连接绑定,即管道二对管道一建立通信连接;
步骤3-4:所述交互系统APP通过管道一发送打开第三方APP指令到管道二,触发APP SHELL模块运行所选择的文件关联的第三方APP来打开该文件;
触发APP SHELL模块运行所选择的文件关联的第三方APP来打开该文件的具体代码如下: 步骤4:以轮询的方式,交互系统APP通过管道一侦听管道二传送来的事件并执行处理,同时,APP SHELL模块通过管道二侦听管道一传送来的事件并执行处理;
所述步骤4具体包括:
步骤4-1:首先管道一向管道二发送修改显示分辨率和缩放比例的指令,管道二侦听接收到修改显示分辨率和缩放比例的指令后,APP SHELL模块调整当前工作站打开的所述文件的画面的显示分辨率和缩放比例,并且把调整后的文件的画面形成为当前虚拟位面Virtual Surface;
进一步的,所述把调整后的文件的画面形成为当前虚拟位面Virtual Surface的方法,具体包括:步骤4-1-1:通过Windows平台的IDXGIOutputDuplication接口捕获工作站的当前虚拟位面Virtual Surface;
步骤4-1-2:创建当前虚拟位面Virtual Surface,所述当前虚拟位面VirtualSurface包括当前虚拟位面Virtual Surface的位面信息;
步骤4-2:接着管道二向管道一发送当前虚拟位面Virtual Surface,管道一侦听接收到当前虚拟位面Virtual Surface后,激活针对工作站传送来的数据的数据事件绑定,即交互系统APP在其主界面上显示出当前虚拟位面Virtual Surface;
步骤4-3:在交互系统APP的主界面上出现了鼠标、触控或者键盘动作时,交互系统APP通过管道一向管道二打包发送对应的鼠标指令、触控指令或者键盘指令;
步骤4-4:管道二侦听接收到鼠标指令、触控指令或者键盘指令后,激活针对交互系统APP传送来的数据的数据绑定,即通过虚拟驱动模块Virtual HID Device实现对交互系统APP的主界面上的文件的画面的控制。
进一步的,通过虚拟驱动模块Virtual HID Device实现对交互系统APP的主界面上的文件的画面的控制的方法,具体包括:
首先解析鼠标指令、触控指令或者键盘指令,得到鼠标指令、触控指令或者键盘指令内的内容,然后把得到鼠标指令、触控指令或者键盘指令内的内容整理成虚拟驱动模块Virtual HID Device能够识别的格式,最后发送给虚拟驱动模块Virtual HID Device响应。
所述步骤4具体还包括:
步骤4-5:在工作站中的第三方APP打开的文件的画面出现变化时,第三方APP把该文件的画面变化的区域更新到当前虚拟位面Virtual Surface;
步骤4-6:APP SHELL模块通过管道二把更新后的当前虚拟位面Virtual Surface传送到管道一,激活针对工作站传送来的数据的数据事件绑定,即交互系统APP就把接收到的更新后的当前虚拟位面Virtual Surface的画面在主界面上更新显示。
所述Windows平台下第三方APP原生集成的方法,还包括:
步骤5:关闭第三方APP;
所述步骤5具体包括;
步骤5-1:交互系统APP通过管道一发送关闭指令到管道二;
步骤5-2:APP SHELL模块接收关闭指令后,激活针对工作站断开时的断开事件绑定,APP SHELL模块释放管道一和管道二之间的通信连接;
步骤5-3:调用RpcWinStationDisconnect函数来释放工作站资源。
本发明的有益效果为:
本发明实施通过创建第三方APP运行环境来实现第三方APP独立于当前系统运行,保证了程序运行的稳定性,提高了软件中集中控制第三方APP的易用性。所述交互系统APP通过管道一发送打开第三方APP指令到管道二,在工作站上,触发APP SHELL模块运行所选择的文件关联的第三方APP来打开该文件,是原生真实的打开文件,能够在工作站上保留原生第三方APP的所有特性(高清晰度、动画、墨迹等),进一步的还能结合Virtual HIDDevice对第三方APP打开的文件进行修改并保存,也能够原生的产生第三方APP的报错窗口和多窗口;把得到鼠标指令、触控指令或者键盘指令内的内容整理成虚拟驱动模块VirtualHID Device能够识别的格式,最后发送给虚拟驱动模块Virtual HID Device响应,就能在驱动层面上执行真实的响应,由此反馈到第三方软件的应用层,最终实现对第三方APP打开的文件进行修改并保存。这样,在工作站原生的产生第三方APP的报错窗口和多窗口时,也能够把对应的报错窗口和多窗口的更新后的当前虚拟位面Virtual Surface的画面在主界面上更新显示,就能呈现给用户供用户操作。因为是在独立的工作站内运行第三方APP,因此打开的第三方APP异常了也不会会影响当前系统的稳定性。并且,第三方APP能独立呈现在交互系统APP上,软件风格统一,这样的开发工作量小,集成容易。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
图1为本发明的Windows平台下第三方APP原生集成的方法的总体流程图;
图2为本发明的步骤1-1到步骤1-2的流程图;
图3为本发明的步骤3-1到步骤3-4的流程图;
图4为本发明的步骤3-1-1到步骤3-1-2的流程图;
图5为本发明的步骤3-3-1到步骤3-3-4的流程图;
图6为本发明的步骤4-1到步骤4-4的流程图;
图7为本发明的步骤4-1-1到步骤4-1-2的流程图;
图8为本发明的步骤4-5到步骤4-6的流程图;
图9为本发明的步骤5-1到步骤5-3的流程图。
具体实施方式
下文中将结合附图对本发明的实施例进行详细说明。
本发明使用了工作站(WinStation)、间接显示驱动程序 (IDD)、Virtual HIDDevice、Virtual Surface和管道等技术。
Windows平台使用工作站对多用户进程进行内核级别的隔离,使同一系统下的多个程序各自独立运行和操作,相互无影响;IDD显示技术提供了一个简单的用户模式驱动程序模型;Virtual HID Device提供了键盘、鼠标和触控的驱动;Virtual Surface提供了共享位面供交互系统APP显示;管道提供了相关指令以及键盘鼠标和触控指令转发。
如图1-图9所示,Windows平台下第三方APP原生集成的方法,包括:
步骤1:作为服务端的交互系统APP启动,创建服务端的交互管道服务;交互系统APP可以启动多个第三方APP:
进一步的,所述交互系统APP运行在具有Windows平台的计算机终端中,该计算机终端的显示屏可以是触摸屏,所述交互系统APP的主界面上具有文件打开菜单,点击所述文件打开菜单,就能选择计算机终端中的各路径下的文件。
所述步骤1具体包括:
步骤1-1:通过运行一个线程一来首先创建一个管道一;运行线程一就是为了同步执行创建管道一的操作,并且不影响作为服务端的交互系统AP的其他程序的工作。
步骤1-2:对管道一执行事件绑定,事件绑定包括针对工作站的请求连接的连接事件绑定、针对工作站断开时的断开事件绑定以及针对工作站传送来的数据的数据事件绑定,由此创建了服务端的交互管道服务;运用了管道一,就能达到通过管道一来监控工作站的运行情况,避免了驱动层面的一些干扰,其运用简单高效,能够提高通过管道一来监控工作站的运行情况的效率。针对工作站的请求连接的连接事件绑定、针对工作站断开时的断开事件绑定以及针对工作站传送来的数据的数据事件绑定均是一段程序,可以用消息激活的方式来运行该段程序。
步骤2:点击交互系统APP的主界面上的文件打开菜单,就能选择计算机终端中的各路径下的文件;
步骤3:选择结束后,就执行运行所选择的文件关联的第三方APP的流程;所选择的文件关联的第三方APP就是选择的文件其默认的作为其打开软件的第三方APP。
所述步骤3具体包括:
步骤3-1:所述交互系统APP通过连接内核管道来创建工作站(WinStation);
交互系统APP通过连接内核管道来创建工作站前,在如Windows平台这样的操作系统中,内核组件之间的通讯基于ALPC技术,跟内核管道进行通讯需要SYSTEM权限,为了解决权限问题,需要预先使用ImpersonateNamedPipeClient函数进行提权处理获得系统权限。内核管道的同步协调性好,这样创建的工作站更稳定和不容易受干扰。
所述步骤3-1具体包括:
步骤3-1-1:在创建工作站时,使用 RpcWinStationOpenServer函数初始化RPC环境,RpcWinStationOpenServer 方法返回一个服务端句柄;该服务端句柄可在其他WinStation API 方法中用于查询有关服务端上的 WinStation的信息,WinStation就是工作站,API就是对应的应用程序接口,其具体代码如下:
BOOLEAN RpcWinStationOpenServer(
[in] handle_t hBinding,
[out] DWORD* pResult,
[out] SERVER_HANDLE* phServer
);
步骤3-1-2:用RpcWinStationConnect函数运用内核管道来创建新的工作站WinStation,具体代码如下:
BOOLEAN RpcWinStationConnect(
[in] SERVER_HANDLE hServer,
[out] DWORD* pResult,
[in] DWORD ClientLogonId,
[in] DWORD ConnectLogonId,
[in] DWORD TargetLogonId,
[in, size_is(PasswordSize)] PWCHAR pPassword,
[in, range(0, 1024)] DWORD PasswordSize,
[in] BOOLEAN Wait
);
步骤3-2:作为客户端的工作站启动,运行APP SHELL模块来加载初始化组件;
进一步的,所述加载初始化组件的方法,具体包括:
加载IDD驱动和虚拟驱动模块Virtual HID Device;
加载IDD驱动和虚拟驱动模块Virtual HID Device的方式为调用
ZwLoadDriver函数来将IDD驱动和虚拟驱动模块Virtual HID Device加载到工作站;
所述IDD驱动为间接显示驱动程序,该间接显示驱动程序提供了一个简单计算机终端虚拟显示用的用户模式驱动程序模型,用于支持未连接到传统 GPU 显示输出的虚拟监视器,其效果在于虚拟的模拟在计算机终端的显示屏上的显示驱动程序;运用该IDD驱动,能够在第三方APP出现显示GPU资源的时候,能够起到模拟执行显示驱动程序的效果,这样整体运行就不会出现没有虚拟的显示驱动程序时的卡顿和不流畅的缺陷,也就是提供一个无缝连接的显示驱动资源,使得第三方APP出现显示GPU资源的时候,不至于因为缺少相关的显示驱动环节而显示不正常的问题。
所述虚拟驱动模块Virtual HID Device包括计算机终端的键盘的驱动程序、计算机终端的鼠标的驱动程序和计算机终端的触摸屏的驱动程序。具体代码如下:
RtlInitUnicodeString (&Path,
L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\ngvid2");*此处为IDD驱动和虚拟驱动模块Virtual HID Device的路径
st = ZwLoadDriver (&Path);
步骤3-3:所述APP SHELL模块创建客户端的交互管道服务;
所述步骤3-3具体包括:
步骤3-3-1:通过运行一个线程二来首先创建一个管道二;运行线程二就是为了同步执行创建管道二的操作,并且不影响其他程序的工作。
步骤3-3-2:对管道二执行事件绑定,事件绑定包括连接上交互系统APP的连接绑定和针对交互系统APP传送来的数据的数据绑定,由此创建了客户端的交互管道服务;连接上交互系统APP的连接绑定和针对交互系统APP传送来的数据的数据绑定均是一段程序,可以用消息激活的方式来运行该段程序。
步骤3-3-3:激活针对工作站的请求连接的连接事件绑定,即管道一对管道二发送请求连接指令;
步骤3-3-4:管道二接收到请求连接指令后,激活连接上交互系统APP的连接绑定,即管道二对管道一建立通信连接;
步骤3-4:所述交互系统APP通过管道一发送打开第三方APP指令到管道二,触发APP SHELL模块运行所选择的文件关联的第三方APP来打开该文件;工作站一一对应一个第三方APP,这样不容易混淆第三方APP,并且能够在运行第三方APP的时候,独自占用一个独立的工作站资源,运行效率高。
触发APP SHELL模块运行所选择的文件关联的第三方APP来打开该文件的具体代码如下:SHELLEXECUTEINFOW ShExecInfo = { 0 };
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS |
SEE_MASK_FLAG_NO_UI;
ShExecInfo.lpVerb = L"open";
ShExecInfo.lpFile = wAppPath.c_str();
ShExecInfo.lpParameters = wAppParams.c_str();
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_MAXIMIZE;
ShellExecuteExW(&ShExecInfo);
这样,所述交互系统APP通过管道一发送打开第三方APP指令到管道二,在工作站上,触发APP SHELL模块运行所选择的文件关联的第三方APP来打开该文件,是原生真实的打开文件,能够在工作站上保留原生第三方APP的所有特性(高清晰度、动画、墨迹等),进一步的还能结合Virtual HID Device对第三方APP打开的文件进行修改并保存;也能够原生的产生第三方APP的报错窗口和多窗口,因为是在独立的工作站内运行第三方APP,因此打开的第三方APP异常了也不会会影响当前系统的稳定性。
步骤4:以轮询的方式,交互系统APP通过管道一侦听管道二传送来的事件并执行处理,同时,APP SHELL模块通过管道二侦听管道一传送来的事件并执行处理;
所述步骤4具体包括:
步骤4-1:首先管道一向管道二发送修改显示分辨率和缩放比例的指令,管道二侦听接收到修改显示分辨率和缩放比例的指令后,APP SHELL模块调整当前工作站打开的所述文件的画面的显示分辨率和缩放比例,并且把调整后的文件的画面形成为当前虚拟位面Virtual Surface;修改显示分辨率和缩放比例的指令中包含有显示分辨率和缩放比例,显示分辨率和缩放比例是分别根据具体的交互系统APP的主界面显示打开的文件所要求的分辨率和缩放比例而定的,调整当前工作站打开所述文件的显示分辨率就是把当前工作站打开的文件画面的显示分辨率调整为修改显示分辨率和缩放比例的指令中的显示分辨率,调整当前工作站打开的所述文件的缩放比例就是把该文件的画面按修改显示分辨率和缩放比例的指令中的缩放比例来缩放,由此更能适应具体的交互系统APP的主界面的显示需求。
进一步的,所述把调整后的文件的画面形成为当前虚拟位面Virtual Surface的方法,具体包括:步骤4-1-1:通过Windows平台的IDXGIOutputDuplication接口捕获工作站的当前虚拟位面Virtual Surface;具体代码如下:
HRESULT AcquireNextFrame(
[in] UINT TimeoutInMilliseconds,
[out] DXGI_OUTDUPL_FRAME_INFO *pFrameInfo,
[out] IDXGIResource **ppDesktopResource
);
步骤4-1-2:创建当前虚拟位面Virtual Surface,所述当前虚拟位面VirtualSurface包括当前虚拟位面Virtual Surface的位面信息,也就是调整后的文件的画面的图片信息;其具体代码为:
D3D11_TEXTURE2D_DESC DeskTexD;
RtlZeroMemory(&DeskTexD, sizeof(D3D11_TEXTURE2D_DESC));
DeskTexD.Width = DeskBounds->right - DeskBounds->left;
DeskTexD.Height = DeskBounds->bottom - DeskBounds->top;
DeskTexD.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
DeskTexD.SampleDesc.Count = 1;
DeskTexD.Usage = D3D11_USAGE_DEFAULT;
DeskTexD.BindFlags=D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
eskTexD.MiscFlags =
D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX | D3D11_RESOURCE_MISC_SHARED_NTHANDLE;
m_SharedSurf->QueryInterface(__uuidof(IDXGIKeyedMutex), reinterpret_cast<void**>(&m_KeyMutex));
步骤4-2:接着管道二向管道一发送当前虚拟位面Virtual Surface,管道一侦听接收到当前虚拟位面Virtual Surface后,激活针对工作站传送来的数据的数据事件绑定,即交互系统APP在其主界面上显示出当前虚拟位面Virtual Surface;
步骤4-3:在交互系统APP的主界面上出现了鼠标、触控或者键盘动作时,交互系统APP通过管道一向管道二打包发送对应的鼠标指令、触控指令或者键盘指令;所述鼠标指令中包括鼠标在主界面上的位置和鼠标状态(也就是鼠标左键或右键是否按下或者抬起的状态),触控指令包括在触摸屏上触摸的点数、在主界面上的触摸位置和触控状态(也就是触控动作是否按下或者抬起的状态);键盘指令就是按下键盘上哪个键。
步骤4-4:管道二侦听接收到鼠标指令、触控指令或者键盘指令后,激活针对交互系统APP传送来的数据的数据绑定,即通过虚拟驱动模块Virtual HID Device实现对交互系统APP的主界面上的文件的画面的控制。
进一步的,通过虚拟驱动模块Virtual HID Device实现对交互系统APP的主界面上的文件的画面的控制的方法,具体包括:
首先解析鼠标指令、触控指令或者键盘指令,得到鼠标指令、触控指令或者键盘指令内的内容,所述鼠标指令内的内容包括鼠标在主界面上的位置和鼠标状态(也就是鼠标左键或右键是否按下或者抬起的状态),触控指令内的内容包括在触摸屏上触摸的点数、在主界面上的触摸位置和触控状态(也就是触控动作是否按下或者抬起的状态);键盘指令内的内容包括按下键盘上哪个键。然后把得到鼠标指令、触控指令或者键盘指令内的内容整理成虚拟驱动模块Virtual HID Device能够识别的格式,最后发送给虚拟驱动模块Virtual HID Device响应。把得到鼠标指令、触控指令或者键盘指令内的内容整理成虚拟驱动模块Virtual HID Device能够识别的格式,最后发送给虚拟驱动模块Virtual HIDDevice响应,就能在驱动层面上执行真实的响应,由此反馈到第三方软件的应用层,最终实现对第三方APP打开的文件进行修改并保存。
具体代码如下:
auto touchType = doc["touch_type"].GetInt();
rapidjson::Document::Array pointArray =
doc["touch_points"].GetArray();
…
std::vector<int> m_touchIds;
…
POINTER_TOUCH_INFO *contacts =
new POINTER_TOUCH_INFO[contactCount];
//以下就是把得到鼠标指令、触控指令或者键盘指令内的内容整理成虚拟驱动模块Virtual HID Device能够识别的格式的方法:
for (int i = 0; i < contactCount; i++)
{
float x = screenWidth * points[i].XValue;
float y = screenHeight * points[i].YValue;
if (points[i].Status == 7)
{
BOOL bFind = FALSE;
//第一次出现的id就按下动作
std::vector<int>::iterator it = m_touchIds.begin();
while (it != m_touchIds.end())
{
if (points[i].ContactID == *it)
{
bFind = TRUE;
break;
}
it++;
}
if (!bFind)
{
m_touchIds.push_back(points[i].ContactID);
contacts[i].pointerInfo.pointerFlags =
POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT | POINTER_FLAG_DOWN;
}
else
{
contacts[i].pointerInfo.pointerFlags =
POINTER_FLAG_INRANGE|POINTER_FLAG_INCONTACT|POINTER_FLAG_UPDATE;
}
}
else if (points[i].Status == 6)
{
contacts[i].pointerInfo.pointerFlags = POINTER_FLAG_UP;
}
contacts[i].pointerInfo.pointerType = PT_TOUCH;
contacts[i].pointerInfo.pointerId = points[i].ContactID; //contact
contacts[i].pointerInfo.ptPixelLocation.x = x; // Y co-ordinate oftouch on screen
contacts[i].pointerInfo.ptPixelLocation.y = y; // X co-ordinate oftouch on screen
contacts[i].touchFlags = TOUCH_FLAG_NONE;
contacts[i].touchMask =
TOUCH_MASK_CONTACTAREA | TOUCH_MASK_ORIENTATION | TOUCH_MASK_PRESSURE;
contacts[i].orientation = 1;
contacts[i].pressure = 0;
}
InjectTouchInput(contactCount, contacts);
}
所述步骤4具体还包括:
步骤4-5:在工作站中的第三方APP打开的文件的画面出现变化时,第三方APP把该文件的画面变化的区域更新到当前虚拟位面Virtual Surface;具体代码如下:
FRAME_DATA* Data;
…
DXGI_OUTDUPL_MOVE_RECT* MoveBuffer =
reinterpret_cast<DXGI_OUTDUPL_MOVE_RECT*>(Data->MetaData);
RECT* DirtyBuffer = reinterpret_cast<RECT*>(Data->MetaData +
(Data->MoveCount * sizeof(DXGI_OUTDUPL_MOVE_RECT)));
步骤4-6:APP SHELL模块通过管道二把更新后的当前虚拟位面Virtual Surface传送到管道一,激活针对工作站传送来的数据的数据事件绑定,即交互系统APP就把接收到的更新后的当前虚拟位面Virtual Surface的画面在主界面上更新显示。这样,在工作站原生的产生第三方APP的报错窗口和多窗口时,也能够把对应的报错窗口和多窗口的更新后的当前虚拟位面Virtual Surface的画面在主界面上更新显示,就能呈现给用户供用户操作。并且,第三方APP能独立呈现在交互系统APP上,软件风格统一,这样的开发工作量小,集成容易。
所述Windows平台下第三方APP原生集成的方法,还包括:
步骤5:关闭第三方APP;
所述步骤5具体包括;
步骤5-1:交互系统APP通过管道一发送关闭指令到管道二;
步骤5-2:APP SHELL模块接收关闭指令后,激活针对工作站断开时的断开事件绑定,APP SHELL模块释放管道一和管道二之间的通信连接;
步骤5-3:调用RpcWinStationDisconnect函数来释放工作站资源。
其具体代码为:
BOOLEAN RpcWinStationDisconnect(
[in] SERVER_HANDLE hServer,
[out] DWORD* pResult,
[in] DWORD LogonId,
[in] BOOLEAN bWait
)。
以上以用实施例说明的方式对本发明作了描述,本领域的技术人员显而易见的是,本公开不限于以上描述的实施例,在不偏离本发明的范围的状态下,能够做出各种变动、改变和替换。
Claims (8)
1.一种Windows平台下第三方APP原生集成的方法,其特征在于,包括:
步骤1:作为服务端的交互系统APP启动,创建服务端的交互管道服务;
步骤2:点击交互系统APP的主界面上的文件打开菜单,就能选择计算机终端中的各路径下的文件;
步骤3:选择结束后,就执行运行所选择的文件关联的第三方APP的流程;
步骤4:以轮询的方式,交互系统APP通过管道一侦听管道二传送来的事件并执行处理,同时,APP SHELL模块通过管道二侦听管道一传送来的事件并执行处理;
所述步骤3具体包括:
步骤3-1:所述交互系统APP通过连接内核管道来创建工作站;
步骤3-2:作为客户端的工作站启动,运行APP SHELL模块来加载初始化组件;
步骤3-3:所述APP SHELL模块创建客户端的交互管道服务;
步骤3-4:所述交互系统APP通过管道一发送打开第三方APP指令到管道二,触发APPSHELL模块运行所选择的文件关联的第三方APP来打开该文件;
所述步骤4具体包括:
步骤4-1:首先管道一向管道二发送修改显示分辨率和缩放比例的指令,管道二侦听接收到修改显示分辨率和缩放比例的指令后,APP SHELL模块调整当前工作站打开的所述文件的画面的显示分辨率和缩放比例,并且把调整后的文件的画面形成为当前虚拟位面Virtual Surface;
所述把调整后的文件的画面形成为当前虚拟位面Virtual Surface的方法,具体包括:
步骤4-1-1:通过Windows平台的IDXGIOutputDuplication接口捕获工作站的当前虚拟位面Virtual Surface;
步骤4-1-2:创建当前虚拟位面Virtual Surface,所述当前虚拟位面Virtual Surface包括当前虚拟位面Virtual Surface的位面信息;
步骤4-2:接着管道二向管道一发送当前虚拟位面Virtual Surface,管道一侦听接收到当前虚拟位面Virtual Surface后,激活针对工作站传送来的数据的数据事件绑定,即交互系统APP在其主界面上显示出当前虚拟位面Virtual Surface;
步骤4-3:在交互系统APP的主界面上出现了鼠标、触控或者键盘动作时,交互系统APP通过管道一向管道二打包发送对应的鼠标指令、触控指令或者键盘指令;
步骤4-4:管道二侦听接收到鼠标指令、触控指令或者键盘指令后,激活针对交互系统APP传送来的数据的数据绑定,即通过虚拟驱动模块Virtual HID Device实现对交互系统APP的主界面上的文件的画面的控制。
2.根据权利要求1所述的Windows平台下第三方APP原生集成的方法,其特征在于,所述交互系统APP运行在具有Windows平台的计算机终端中,该计算机终端的显示屏是触摸屏,所述交互系统APP的主界面上具有文件打开菜单,点击所述文件打开菜单,就能选择计算机终端中的各路径下的文件。
3.根据权利要求1所述的Windows平台下第三方APP原生集成的方法,其特征在于,所述步骤1具体包括:
步骤1-1:通过运行一个线程一来首先创建一个管道一;
步骤1-2:对管道一执行事件绑定,事件绑定包括针对工作站的请求连接的连接事件绑定、针对工作站断开时的断开事件绑定以及针对工作站传送来的数据的数据事件绑定,由此创建了服务端的交互管道服务;针对工作站传送来的数据的数据事件绑定即交互系统APP在其主界面上显示出当前虚拟位面Virtual Surface。
4.根据权利要求3所述的Windows平台下第三方APP原生集成的方法,其特征在于,交互系统APP通过连接内核管道来创建工作站前,需要预先使用ImpersonateNamedPipeClient函数进行提权处理获得系统权限。
5.根据权利要求3所述的Windows平台下第三方APP原生集成的方法,其特征在于,所述步骤3-1具体包括:
步骤3-1-1:在创建工作站时,使用 RpcWinStationOpenServer函数初始化RPC环境,RpcWinStationOpenServer 方法返回一个服务端句柄;
步骤3-1-2:用RpcWinStationConnect函数运用内核管道来创建新的工作站WinStation。
6.根据权利要求3所述的Windows平台下第三方APP原生集成的方法,其特征在于,所述加载初始化组件的方法,具体包括:
加载IDD驱动和虚拟驱动模块Virtual HID Device;
加载IDD驱动和虚拟驱动模块Virtual HID Device的方式为
调用ZwLoadDriver函数来将IDD驱动和虚拟驱动模块Virtual HID Device加载到工作站;
所述IDD驱动为间接显示驱动程序;
所述虚拟驱动模块Virtual HID Device包括计算机终端的键盘的驱动程序、计算机终端的鼠标的驱动程序和计算机终端的触摸屏的驱动程序。
7.根据权利要求3所述的Windows平台下第三方APP原生集成的方法,其特征在于,所述步骤3-3具体包括:
步骤3-3-1:通过运行一个线程二来首先创建一个管道二;
步骤3-3-2:对管道二执行事件绑定,事件绑定包括连接上交互系统APP的连接绑定和针对交互系统APP传送来的数据的数据绑定,由此创建了客户端的交互管道服务,针对交互系统APP传送来的数据的数据绑定即通过虚拟驱动模块Virtual HID Device实现对交互系统APP的主界面上的文件的画面的控制;
步骤3-3-3:激活针对工作站的请求连接的连接事件绑定,即管道一对管道二发送请求连接指令;
步骤3-3-4:管道二接收到请求连接指令后,激活连接上交互系统APP的连接绑定,即管道二对管道一建立通信连接;
通过虚拟驱动模块Virtual HID Device实现对交互系统APP的主界面上的文件的画面的控制的方法,具体包括:
首先解析鼠标指令、触控指令或者键盘指令,得到鼠标指令、触控指令或者键盘指令内的内容,然后把得到鼠标指令、触控指令或者键盘指令内的内容整理成虚拟驱动模块Virtual HID Device能够识别的格式,最后发送给虚拟驱动模块Virtual HID Device响应。
8.根据权利要求7所述的Windows平台下第三方APP原生集成的方法,其特征在于,所述步骤4具体还包括:
步骤4-5:在工作站中的第三方APP打开的文件的画面出现变化时,第三方APP把该文件的画面变化的区域更新到当前虚拟位面Virtual Surface;
步骤4-6:APP SHELL模块通过管道二把更新后的当前虚拟位面Virtual Surface传送到管道一,激活针对工作站传送来的数据的数据事件绑定,即交互系统APP就把接收到的更新后的当前虚拟位面Virtual Surface的画面在主界面上更新显示;
所述Windows平台下第三方APP原生集成的方法,还包括:
步骤5:关闭第三方APP;
所述步骤5具体包括;
步骤5-1:交互系统APP通过管道一发送关闭指令到管道二;
步骤5-2:APP SHELL模块接收关闭指令后,激活针对工作站断开时的断开事件绑定,APP SHELL模块释放管道一和管道二之间的通信连接;
步骤5-3:调用RpcWinStationDisconnect函数来释放工作站资源。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210109856.7A CN114138150B (zh) | 2022-01-28 | 2022-01-28 | Windows平台下第三方APP原生集成的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210109856.7A CN114138150B (zh) | 2022-01-28 | 2022-01-28 | Windows平台下第三方APP原生集成的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114138150A CN114138150A (zh) | 2022-03-04 |
CN114138150B true CN114138150B (zh) | 2022-04-19 |
Family
ID=80381816
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210109856.7A Active CN114138150B (zh) | 2022-01-28 | 2022-01-28 | Windows平台下第三方APP原生集成的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114138150B (zh) |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109976728B (zh) * | 2019-04-10 | 2022-04-26 | 北京梆梆安全科技有限公司 | 一种原生应用程序的生成方法、装置、移动终端 |
CN111290737B (zh) * | 2020-01-20 | 2023-03-21 | 北京字节跳动网络技术有限公司 | 用于应用程序开发的方法、装置及电子设备 |
-
2022
- 2022-01-28 CN CN202210109856.7A patent/CN114138150B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN114138150A (zh) | 2022-03-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4901261B2 (ja) | 高品質なユーザーインターフェイスによる効率的な遠隔表示を行なうシステム | |
CN102750067B (zh) | 一种基于手持设备的大屏幕交互方法 | |
US6047314A (en) | Remote collaboration system with multiple host computers using multiple applications | |
CN111818120A (zh) | 端云用户交互方法、系统及相应设备、存储介质 | |
WO2019114185A1 (zh) | 一种app远程控制方法及相关设备 | |
JP2012502344A (ja) | 画像センサベースのヒューマンマシンインタフェースを提供する方法システムおよびソフトウェア | |
CN102637127B (zh) | 一种控制鼠标模块的方法及电子设备 | |
CN107766024B (zh) | 一种基于拼接墙的ppt放映控制方法和系统 | |
CN105812421A (zh) | 一种基于Android平台的远程控制方法及装置 | |
CN103365980A (zh) | 基于幻灯片播放的内容动态调整方法 | |
CN111444095A (zh) | 移动设备的测试平台系统和测试方法 | |
CN111078104A (zh) | 一种云桌面上的多点触控设备的重定向方法及计算机设备 | |
WO2023082613A1 (zh) | 显示图层的方法及装置 | |
CN103279314A (zh) | 具有虚拟设备窗口操作的传输装置及其的传输系统 | |
CN114570020A (zh) | 数据处理方法以及系统 | |
CN105262880A (zh) | 一种应用于WiFi网络的手机控制演示系统 | |
CN114138150B (zh) | Windows平台下第三方APP原生集成的方法 | |
WO2023029526A1 (zh) | 窗口内指针的显示控制方法及装置、设备、存储介质 | |
CN111988382B (zh) | 一种跨终端进行应用界面交互的方法和系统 | |
Radloff et al. | Smart interaction management: An interaction approach for smart meeting rooms | |
US8233002B2 (en) | Image transfer apparatus and image transfer method | |
CN103618968B (zh) | 一种面向云环境下的网络电视播放方法及系统 | |
US9141443B2 (en) | Method and system for integrating visual controls with legacy applications | |
CN110337007A (zh) | 任意窗口的白板操作方法、装置、可读存储介质及系统 | |
WO2024021036A1 (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 |