7

我一直在研究一种用于识别显示设备(在我的例子中是电视)的解决方案,以保持专为使用多显示器而设计的主要布局。

假设我连接了 6 台电视。(通常其中 3 个通过 HDMI 端口,另外 3 个通过 DVI 端口(使用 DVI-to-HDMI 适配器)),它们的物理位置是 3x2,如下所示:

电视 1 ... 电视 2 ... 电视 3

电视4 ... 电视5 ... 电视6

目标

我想在每台特定的电视上显示一些全屏内容。Content1 必须转到 TV1,Content2 必须转到 TV2 等等......换句话说:我需要将我的内容推送到 DisplayDevice(电视) - 而不是任何位置或屏幕,因为它们可能会因 Windows 行为而改变。(见下文)

您可能知道,Windows 不会按照您连接它们的顺序枚举显示设备(或者实际上根本不基于任何规则?)。它使用完全不同的方式来枚举显示,例如:

\.\DISPLAY3 ... \.\DISPLAY6 ... \.\DISPLAY1

\.\DISPLAY4 ... \.\DISPLAY2 ... \.\DISPLAY5

为了克服这个问题,当我完成所有电视的连接以匹配它们的真实位置时,我会在显示设置中手动订购电视。

问题

但是这里有一个问题:一些电视型号只是在关机(或设置为待机模式)时假装它们已被拔掉,这会导致 Windows将显示设备从系统中删除并重新枚举重新显示设备。

由于这种行为(一些电视型号和 Windows 本身),我不能指望Screen.DisplayName属性甚至Screen.Location因为它们是变量。它们都在重新枚举过程后立即更改。

到目前为止我尝试过的解决方案

我试图获取所有显示设备的序列号,认为我可以找到一种方法将这些数字与 Screen.DisplayName 相关联。好吧,我实际上是通过使用 SetupAPI、EnumDisplayDevices 来管理到达那里的,但是在我意识到大多数电视没有有效的序列号之后,这一切都变成了垃圾。甚至三星电视也没有序列号(但三星显示器肯定有 - 所以我想这是关于“显示器”和“电视”之间的区别)

毕竟..

我仍在寻找解决这个问题的方法。我想到的另一个想法是,也许我应该停止尝试将内容推送到显示设备(因为它们无法识别)也许我应该尝试将内容推送到显卡的端口,这意味着我必须确定哪些端口显卡的数量与哪个显示设备(屏幕)相关,但我都在谈论它,但对此一无所知 - 甚至不知道这样的事情是否可能。

我正在寻找您的建议,现在谢谢。

4

1 回答 1

1

当您使用 DVI 时,您的问题可能有一个硬件解决方案:EDID 管理器。这些设备模拟有效的 EDID,即使其背后的监视器已关闭。

于 2015-10-22T16:18:01.403 回答