一种跨进程窗口嵌入的自适应同步方法及系统与流程

摘要: 本发明涉及计算机软件与图形用户界面,更具体的说是涉及一种跨进程窗口嵌入的自适应同步方法及系统。背景技术:1、目前,在windows应用程序开发中,将一个外部进程...
一种跨进程窗口嵌入的自适应同步方法及系统与流程

本发明涉及计算机软件与图形用户界面,更具体的说是涉及一种跨进程窗口嵌入的自适应同步方法及系统。

背景技术:

1、目前,在windows应用程序开发中,将一个外部进程的窗口嵌入到宿主应用程序的容器中,是实现多工具统一集成的常见技术手段。常用的实现方式是通过windows api的setparent函数,将外部进程的主窗口重设为宿主窗口的子窗口。该技术被广泛应用于嵌入式软件测试平台、ide插件系统、工业监控软件等需要聚合多个独立工具的桌面应用中。

2、windows系统为应用程序提供了per-monitor dpi aware机制,允许应用程序感知其当前所在显示器并根据该显示器的dpi设置调整界面。然而,该机制存在一个系统级缺陷:当应用程序窗口移动到不同dpi的显示器时,windows会遍历同一进程内的整个窗口树,向每个子窗口发送wm_dpichanged消息,但该通知仅在进程内传递,不跨进程转发。在跨进程窗口嵌入场景中,这一缺陷导致了严重的技术问题。当宿主窗口从100%缩放显示器被拖拽到150%缩放显示器时:宿主进程能收到wm_dpichanged通知,正确调整自身布局;被嵌入的外部进程窗口收不到任何通知,继续使用旧的dpi坐标系统;结果:嵌入窗口位置错位、内容模糊、鼠标点击偏移。

3、setparent函数本身也不会自动同步父子窗口的dpi感知上下文。若父窗口运行在process_per_monitor_dpi_aware模式,而子窗口为unaware模式,系统会强制进行dpi虚拟化转换,进一步加剧显示问题。

4、除dpi适配问题外,跨进程窗口嵌入还存在以下技术难题:

5、(1)渲染不同步导致的视觉闪烁。wpf应用程序使用directx渲染管道,外部嵌入窗口通常使用gdi/user渲染管道,两者刷新周期不同步,导致嵌入区域出现白色闪烁、撕裂或花屏。

6、(2)外部进程崩溃后嵌入窗口消失。外部进程崩溃后,用户需要手动重启进程并重新定位窗口,在长时间连续运行场景中严重影响用户体验。

7、(3)嵌入窗口视觉与交互割裂。嵌入窗口保留了原生标题栏、边框和系统菜单,与宿主窗口风格不一致。

8、现有技术中已存在多种相关方案:

9、cn201710471541.6“windows跨进程窗口管理方法”(武汉斗鱼)公开了一种跨进程窗口管理方法:获取目标进程pid→确定目标进程窗口→创建容器将目标窗口嵌入→匹配样式属性→当容器尺寸、位置、显示隐藏属性变化时同步修改子窗口对应属性。该方案解决了位置/尺寸同步的基本问题,但未涉及不同dpi显示器之间的坐标换算,在混合dpi环境下坐标错位;未涉及渲染同步,闪烁问题依然存在;未涉及进程崩溃恢复。

10、cn119311438a“跨进程窗体嵌入方法”(招商银行)公开了在父进程与子进程之间建立socket连接,在父窗体中设定透明区域,子窗体根据位置信息嵌入透明区域的方法。该方案需要父子进程双方配合建立通信通道,当嵌入第三方闭源程序时无法实施。

11、cn117539582b“多进程界面融合方法及装置”公开了通过获取多个子进程界面的窗口句柄,将多个子进程界面嵌入预设主容器界面的方法。该方案仅涉及“如何嵌入”,未涉及嵌入后的dpi适配、渲染同步和崩溃恢复。

12、us2014237421a1(google)公开了基于显示器原生像素密度确定最小dpi设置以显示图形内容的方法。该方案解决的是同一进程内多个窗口的dpi适配,不涉及跨进程窗口嵌入场景。

13、因此,如何能够在不依赖外部进程配合的前提下,解决跨进程窗口嵌入后位置同步、dpi适配、渲染同步和进程崩溃恢复的问题是本领域技术人员亟需解决的问题。

技术实现思路

1、鉴于上述问题,本发明提出了一种克服上述问题或者至少部分地解决上述问题的一种跨进程窗口嵌入的自适应同步方法及系统。

2、为了实现上述目的,本发明采用如下技术方案:

3、第一方面,本发明实施例提供一种跨进程窗口嵌入的自适应同步方法,包括以下步骤:

4、s1、宿主进程实时感知触发事件,所述触发事件包括所述宿主进程所在显示器的显示环境变化事件、所述宿主窗口中嵌入容器的窗口状态变化事件以及外部进程的健康状态变化事件;

5、s2、响应于所述感知步骤感知到的所述触发事件,调用多因子补偿算法,根据所述嵌入容器的逻辑坐标和逻辑尺寸、所述宿主进程所在显示器的dpi缩放系数、所述显示器的物理尺寸补偿因子以及偏差历史队列,计算所述外部进程的嵌入窗口在物理坐标系中的目标位置和目标尺寸;

6、s3、根据所述计算步骤输出的所述目标位置和所述目标尺寸,调用窗口位置设置函数调整所述嵌入窗口的位置和尺寸;

7、s4、根据所述嵌入容器的窗口状态动态调整所述同步步骤的执行频率;

8、s5、根据所述感知步骤感知到的所述外部进程的健康状态变化事件,当检测到所述外部进程退出时,自动重启所述外部进程并恢复所述嵌入窗口的嵌入状态。

9、进一步地,所述多因子补偿算法包括:

10、获取所述宿主进程所在显示器的当前dpi值,计算dpi缩放系数因子,所述dpi缩放系数因子=当前dpi值/n,其中n为windows系统的基准dpi;获取所述显示器的物理尺寸和分辨率,计算实际ppi值,所述实际ppi值=分辨率像素数/物理尺寸英寸数,计算物理尺寸补偿因子,所述物理尺寸补偿因子=实际ppi值/n;

11、获取偏差历史队列,所述偏差历史队列记录最近n次同步步骤执行后所述嵌入窗口的实际位置与所述目标位置之间的偏差值,当所述偏差历史队列中连续预定次数以上的偏差值向同一方向累积时,判定存在系统性偏移,输出累积偏差作为位置偏差补偿量;

12、将所述dpi缩放系数因子、所述物理尺寸补偿因子和所述位置偏差补偿量合成为最终物理坐标。

13、进一步地,所述获取所述宿主进程所在显示器的当前dpi值,采用分级获取机制:优先通过操作系统原生接口获取与所述显示器对应的精确dpi缩放系数;若所述原生接口调用失败,则回退至基于所述宿主窗口的渲染坐标变换参数计算dpi缩放系数。

14、进一步地,所述同步步骤包括:

15、建立事件驱动路径和定时轮询路径两条并行的同步路径;

16、所述事件驱动路径响应于所述嵌入容器的尺寸变化事件和/或位置变化事件即时触发同步;

17、所述定时轮询路径以预定的时间间隔持续执行同步;

18、两条路径汇聚到仲裁汇聚点,由所述仲裁汇聚点统一执行所述计算步骤和所述调用窗口位置设置函数调整所述嵌入窗口的位置和尺寸的操作。

19、进一步地,还包括渲染同步步骤:

20、在所述宿主窗口的每帧渲染事件中,向所述嵌入窗口发送自定义刷新请求消息;

21、若在预定超时时间内未收到所述嵌入窗口的确认响应,则调用强制刷新函数刷新所述嵌入窗口的显示内容。

22、进一步地,所述渲染同步步骤还包括:

23、在所述嵌入窗口的尺寸缩放开始时,向所述嵌入窗口发送暂停重绘消息,暂停所述嵌入窗口的重绘;

24、在所述尺寸缩放完成后,向所述嵌入窗口发送恢复重绘消息,并调用强制刷新函数触发所述嵌入窗口的完整重绘。

25、进一步地,所述管理步骤中,通过以下双重检测机制检测所述外部进程是否退出:

26、通过进程退出事件监听所述外部进程的退出通知;以及

27、通过向所述外部进程的嵌入窗口发送wm_null消息并检测返回结果,判断所述嵌入窗口是否具有响应性;

28、当所述进程退出事件被触发且所述wm_null消息返回超时或无响应时,确认所述外部进程已退出。

29、进一步地,所述管理步骤中,所述自动重启所述外部进程并恢复所述嵌入窗口的嵌入状态,包括:

30、记录所述外部进程退出时刻所述嵌入窗口的位置和尺寸;

31、根据所述外部进程对应的可执行文件路径自动启动新的外部进程实例;

32、轮询等待所述新的外部进程实例的主窗口句柄有效后,将所述新的外部进程实例的窗口重新嵌入所述宿主进程的嵌入容器中;

33、根据记录的所述位置和尺寸,调用窗口位置设置函数恢复所述嵌入窗口的位置和尺寸。

34、进一步地,所述同步步骤中,将所述多因子补偿算法输出的本次目标位置与上一次同步的实际位置进行比较,计算位置偏差量;当所述位置偏差量小于或等于预设抖动阈值时,所述同步步骤跳过调用窗口位置设置函数调整所述嵌入窗口的操作。

35、第二方面,本发明实施例提供一种跨进程窗口嵌入的自适应同步系统,包括:

36、感知模块,用于宿主进程实时感知触发事件,所述触发事件包括所述宿主进程所在显示器的显示环境变化事件、所述宿主窗口中嵌入容器的窗口状态变化事件以及外部进程的健康状态变化事件;

37、计算模块,用于响应于所述感知模块感知到的所述触发事件,调用多因子补偿算法,根据所述嵌入容器的逻辑坐标和逻辑尺寸、所述宿主进程所在显示器的dpi缩放系数、所述显示器的物理尺寸补偿因子以及偏差历史队列,计算所述外部进程的嵌入窗口在物理坐标系中的目标位置和目标尺寸;

38、同步模块,用于根据所述计算模块输出的所述目标位置和所述目标尺寸,调用窗口位置设置函数调整所述嵌入窗口的位置和尺寸;

39、调节模块,用于根据所述嵌入容器的窗口状态动态调整所述同步模块的执行频率;

40、管理模块,用于根据所述感知模块感知到的所述外部进程的健康状态变化事件,当检测到所述外部进程退出时,自动重启所述外部进程并恢复所述嵌入窗口的嵌入状态。

41、经由上述的技术方案可知,与现有技术相比,本发明公开提供了一种跨进程窗口嵌入的自适应同步方法及系统,具备以下有益效果:

42、1、本发明通过多因子补偿算法,综合dpi缩放系数、物理尺寸补偿因子及偏差历史队列,实现从“属性同步”到“智能补偿”的跨越。算法内置自校准反馈闭环,每次同步后自动更新偏差历史,持续修正系统性偏移,使坐标换算精度达到像素级。同时,该方案不依赖外部进程配合,从根本上绕过了windows系统不跨进程转发dpi通知的硬限制,确保宿主窗口在不同dpi显示器间移动时,嵌入窗口始终精确对齐、无坐标错位。

43、2、本发明通过“感知—同步—调节—渲染—管理”五个闭环环节及三条反馈路径,实现系统自恢复、自优化和自校准:进程崩溃时自动完成“双重检测→状态保存→自动重启→窗口恢复”,无需人工干预,保障长时间连续运行的稳定性;渲染周期对齐与缩放渲染控制消除跨渲染管道的闪烁撕裂问题,保证视觉一致性;动态刷新调节根据窗口状态自动切换刷新频率,在实时跟随与资源消耗间取得平衡,兼顾高性能与低功耗。