【发布时间】:2015-09-19 22:22:37
【问题描述】:
我一直在研究一种用于识别显示设备(在我的例子中是电视)的解决方案,以保持专为使用多显示器而设计的主要布局。
假设我连接了 6 台电视。 (通常其中 3 个通过 HDMI 端口,另外 3 个通过 DVI 端口(使用 DVI-to-HDMI 适配器)),它们的物理位置是 3x2,如下所示:
TV1 ... TV2 ... TV3
TV4 ... TV5 ... TV6
目标
我想在每台特定的电视上显示一些全屏内容。 Content1 必须去 TV1,Content2 必须去 TV2 等等... 换句话说:我需要将我的内容推送到 DisplayDevice(电视)——而不是任何位置或屏幕,因为它们可能会因 Windows 行为而改变。 (见下文)
您可能知道,Windows 不会按照您连接它们的顺序枚举显示设备(或者实际上根本不基于任何规则?)。它使用完全不同的方式来枚举显示,例如:
\.\DISPLAY3 ... \.\DISPLAY6 ... \.\DISPLAY1
\.\DISPLAY4 ... \.\DISPLAY2 ... \.\DISPLAY5
为了克服这个问题,当我完成所有电视的连接以匹配它们的真实位置后,我会在显示设置中手动订购电视。
问题
但是这里有一个问题:一些电视型号只是在关机(或设置为待机模式)时假装它们已拔掉电源,这会导致 Windows drop显示设备,然后重新枚举所有显示设备。
由于这种行为(某些电视型号和 Windows 本身),我不能指望 Screen.DisplayName 属性甚至 Screen.Location 因为它们 是变量。它们都在重新枚举过程后立即更改。
到目前为止我尝试过的解决方案
我试图获取所有显示设备的序列号,认为我可以找到一种方法将这些数字与 Screen.DisplayName 关联起来。好吧,我实际上是通过使用 SetupAPI、EnumDisplayDevices 来管理到达那里的,但是在我意识到大多数电视没有有效的序列号之后,这一切都变成了垃圾。即使是三星电视也没有序列号(但三星显示器肯定有 - 所以我想这是关于“显示器”和“电视”之间的区别)
毕竟..
我仍在寻找解决此问题的方法。 我想到的另一个想法是,也许我应该停止尝试将内容推送到显示设备(因为它们无法识别)也许我应该尝试将内容推送到显卡的端口,这意味着我必须确定哪些端口显卡的数量与哪个显示设备(屏幕)相关,但我在谈论它时对此一无所知 - 甚至不知道这样的事情是否可能。
我正在寻找您的建议,谢谢。
【问题讨论】:
-
您的 GPU 想法听起来可能会奏效。此外,仅使用在断电时不会出现问题的适当显示器怎么样?
-
这不取决于我,在我构建这个项目之前电视已经存在。
-
您有没有找到一种方法来确定哪个显示设备与哪个显卡端口相关联?我也有同样的问题需要解决。
-
@Balk 不,没有解决方案。出于多显示器的目的,我同时使用 HDMI 和 DVI(甚至是 DisplayPort)端口,但我认为没有办法做到这一点。然而,一个基于硬件的解决方案偶然地出现了。因为大多数电视都使用 HDMI 输入,所以我将 DVI 转 HDMI 和 DP 转 HDMI 适配器用于非 HDMI 显卡端口。再说一次,大多数时候我都使用 HDMI 延长器,因为 PC 和电视之间的距离较远,而 Uptech HDMI 延长器解决了我的问题。即使您在电视侧拔下 HDMI 电缆,它也不会掉落电视。他们一直都在。
标签: c# .net windows multiple-monitors edid