繁体   English   中英

如何在没有物理硬件的情况下利用多显示器设置的功能?

[英]How do I utilize the functionality of a multi-monitor setup without physical hardware?

过去几天我花了很多时间研究是否可以使用Windows API(最好是Windows 8)来开发一个可以利用单个物理监视器中的多个物理监视器配置中的功能的应用程序。 据我所知,你根本做不到,或者根本就没有记录。 下面我将介绍我的问题以及我所进行的研究,希望有人可以提供一些我尚未遇到的知识。


问题

在Windows 7+中,多显示器配置能够利用一些很酷的桌面功能,例如能够使用跨越多个显示器的单个大型桌面,在它们之间拖动无缝应用程序,切换是否具有任务栏跨度的能力等等。

虚拟屏幕(MSDN链接)。 在此输入图像描述

我希望能够访问此API并允许我的应用程序使用它来允许用户从单个物理监视器有效地拥有多个虚拟桌面。 就那么简单。


解决方案

在这里,我将介绍我发现的一些解决方案,以及为什么它们不起作用(据我所知)。

1.使用Window Station和Desktop API创建全新的桌面并在它们之间切换。

“窗口站是与进程关联的安全对象,包含剪贴板,原子表和一个或多个桌面对象。桌面是窗口站中包含的安全对象。桌面具有逻辑显示表面并包含用户界面对象,如窗口,菜单和钩子。“ MSDN链接。

这是一种在Windows中有效创建多个桌面的非常简洁的方法,允许用户在单个监视器之间切换。 但它有以下几点警告:

“Windows没有提供将窗口从一个桌面对象移动到另一个桌面对象的方法,并且因为必须在每个桌面上运行单独的Explorer进程以提供任务栏和开始菜单,所以大多数托盘应用程序仅在第一个桌面上可见。” TechNET上的Sysinternals。

2.尝试创建虚假显示驱动程序以强制Windows认为它有多个监视器。

这似乎是几个现有类似应用程序(如ZoneScreen)的有效选项。 但是在Windows 7中,安装未签名的驱动程序变得很困难,而在Windows 8中,它似乎是不可能的。

3.通过尝试跟踪应用程序并强制它们隐藏在用户定义的监视器组之间来伪造它。

商用和免费应用程序(如DisplayFusionFinestra Virtual Desktops)似乎都使用了一个高度复杂且复杂的跟踪已启动应用程序的系统,并试图在用户在虚拟监视器之间切换时隐藏和取消隐藏它们。

这是最可行的解决方案,因为它基本上满足所有要求。 但它是一个黑客 - 有些应用程序并没有真正使用它,并且有许多极端情况会失败。


我在这里错过了什么? 到目前为止,我的研究是否有误? 我还没有检测到API的哪些区域?

从单个物理监视器开发可以利用多物理监视器配置中的功能的应用程序

Windows API将每个桌面绑定到资源管理器进程,并且基于每个桌面管理任务栏,通知等。 通过创建新的桌面对象,可以使用此API创建新的虚拟桌面 但是,如果您尝试创建的东西相当于Linux发行版中的工作区,那么您就不走运了。 桌面对象管理在进程树下启动的应用程序,并且由于Windows资源管理器处理工作的方式,无法在这些桌面对象之间移动应用程序等。

解决方案

在这里,我将介绍我发现的一些解决方案,以及为什么它们不起作用(据我所知)。

实现工作区附近的唯一方法是伪造它 -

每个工作空间及其进程必须通过插槽显示在任务栏/通知区域中。 但这很难实现,游戏,全屏应用程序等必将打破。 我不知道这在Win8中是如何工作的。 所以是的 - Windows中的工作空间将从一开始就很糟糕。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM