gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:40:28 24 4
gpt4 key购买 nike

过去几天我一直在研究是否可以使用 Windows API(最好是 Windows 8)来开发一个应用程序,该应用程序可以从单个物理监视器利用多个物理监视器配置中的功能。据我所知,您根本做不到,或者根本没有记录。下面我将介绍我的问题和我所做的研究,希望有人能提供一些我还没有遇到的知识。


问题

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

The Virtual Screen (MSDN link). enter image description here

我想获得对该 API 的访问权限,并允许我的应用程序使用它来允许用户从单个物理监视器有效地拥有多个虚拟桌面。就这么简单。


解决方案

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

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

“窗口站是与进程关联的安全对象,包含剪贴板、原子表和一个或多个桌面对象。桌面是包含在窗口站内的安全对象。桌面具有逻辑显示表面并包含用户界面对象,例如窗口、菜单和 Hook 。” MSDN Link.

这是一种非常简洁的方法,可以在 Windows 中有效地创建多个桌面,允许用户在单个显示器上进行切换。然而,它有以下重要警告:

“Windows 不提供将窗口从一个桌面对象移动到另一个桌面对象的方法,并且由于单独的资源管理器进程必须在每个桌面上运行以提供任务栏和开始菜单,因此大多数托盘应用程序仅可见在第一个桌面上。” Sysinternals on TechNET.

<强>2。尝试创建伪造的显示驱动程序以强制 Windows 相信它有多个显示器。

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

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

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

这是最可行的解决方案,因为它在很大程度上满足了所有要求。但它是一种 hack - 有些应用程序并不能真正使用它,并且在许多极端情况下它会失败。


我在这里错过了什么?到目前为止,我的任何研究是否不正确? API 中是否还有我尚未研究的领域?

最佳答案

develop an application that can utilize the features in a multiple physical monitor configuration, from a single physical monitor

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

The Solution

Here I will present a number of proposed solutions I have found, and why they will not work (As far as I can tell).

实现接近工作空间的东西的唯一方法是伪造它 -

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

关于c# - 如何在没有物理硬件的情况下利用多显示器设置的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20367371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com