过去几天我花了很多时间研究是否可以使用Windows API(最好是Windows 8)来开发一个可以从单个物理监视器中利用多个物理监视器配置中的功能的应用程序。据我所知,你根本做不到,或者根本就没有记录。下面我将介绍我的问题和我所进行的研究,希望有人可以提供一些我尚未遇到的知识。
问题
在Windows 7+中,多显示器配置能够利用一些很酷的桌面功能,例如能够使用跨越多个显示器的单个大型桌面,在它们之间拖动无缝应用程序,切换是否具有任务栏跨度的能力或等等。
The Virtual Screen (MSDN link).
我希望能够访问此API并允许我的应用程序使用它来允许用户从单个物理监视器有效地拥有多个虚拟桌面。就这么简单。
解决方案
在这里,我将介绍一些我找到的解决方案,以及为什么它们不起作用(据我所知)。
1。使用Window Station&桌面API用于创建全新的桌面并在它们之间切换。
“窗口工作站是与进程关联的安全对象,包含剪贴板,原子表和一个或多个桌面对象。 桌面是窗口站中包含的安全对象。桌面具有逻辑显示表面,并包含用户界面对象,如窗口,菜单和挂钩。“ MSDN Link.
这是一种在Windows中有效创建多个桌面的非常简洁的方法,允许用户在单个监视器之间切换。但它有以下几点警告:
“Windows不提供将窗口从一个桌面对象移动到另一个桌面对象的方法,并且因为必须在每个桌面上运行单独的Explorer进程以提供任务栏和开始菜单,所以大多数托盘应用程序仅可见在第一个桌面上。“ Sysinternals on TechNET.
2。尝试创建虚假显示驱动程序以强制Windows认为它有多个监视器。
对于一些现有的类似应用程序,例如ZoneScreen,这似乎是一个有效选项。但是在Windows 7中,安装未签名的驱动程序变得很困难,而在Windows 8中,它似乎是不可能的。
第3。通过尝试跟踪应用程序并强制它们隐藏在用户定义的监视器组之间来伪造它。
DisplayFusion和Finestra Virtual Desktops等广告和免费应用似乎都使用了一个高度复杂的复杂系统来跟踪已启动的应用程序,并尝试在用户在虚拟监视器之间切换时隐藏和取消隐藏它们。 / p>
这是最可行的解决方案,因为它基本满足所有要求。但它是一个黑客 - 一些应用程序并没有真正使用它,并且有很多极端情况会失败。
我在这里缺少什么?到目前为止,我的研究是否有误?我还没有检测到API的哪些区域?
答案 0 :(得分:1)
开发一个可以从单个物理监视器中使用多个物理监视器配置中的功能的应用程序
Windows API将每个桌面与浏览器进程联系起来,任务栏,通知等基于每个桌面进行管理。通过创建新的桌面对象,可以使用此API创建新虚拟桌面。但是,如果您尝试创建的东西相当于Linux发行版中的工作区,那么您就不走运了。桌面对象管理在进程树下启动的应用程序,并且由于Windows资源管理器处理工作的方式,无法在这些桌面对象之间移动应用程序等。
解决方案
在这里,我将介绍一些我找到的解决方案,以及为什么它们不起作用(据我所知)。
实现工作区附近的唯一方法就是伪造它 -
每个工作区及其进程必须按插槽显示在任务栏/通知区域中。但这很难实现,游戏,全屏应用程序等必将打破。我不知道这在Win8中是如何工作的。所以是的 - Windows中的工作空间将从一开始就很糟糕。