一种可靠的识别显示设备的方法?

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达到了这一点,但在我意识到大多数电视机没有有效的序列号后,这一切都变成了垃圾。即使三星电视也没有序列号(但三星监视器当然有 - 所以我想这是“监视器”和“电视”的区别)
总之...
我仍在寻找解决此问题的方法。另一个想法是,也许我应该停止试图推送内容到显示设备(因为它们无法识别),而应该尝试将内容推送到显卡的端口上,这意味着我必须确定哪些显卡端口与哪个显示设备(屏幕)相关联,但我对此一无所知,甚至不知道是否可能。
期待您的建议,先谢谢。

你的GPU想法听起来很有可能行得通。另外,如果只使用在断电时不会出问题的合适显示器呢? - user9993
这不是我的问题,这些电视在我开始构建这个项目之前就已经存在了。 - Roni Tovi
你是否曾经找到一种方法来确定哪个显示设备与哪个显卡端口相对应?我也有同样的问题需要解决。 - Game_Overture
1
@Balk 没有解决这个问题的方法。为了多显示目的,我使用HDMI和DVI(甚至DisplayPort)端口,我不认为有办法解决。 然而,一种基于硬件的解决方案偶然出现了。因为大多数电视使用HDMI输入,我使用DVI-to-HDMI和DP-to-HDMI适配器来连接非HDMI图形卡端口。 而且,大多数情况下我使用HDMI扩展器,因为从PC到电视的距离较远,Uptech HDMI Extender解决了我的问题。即使在电视侧拔掉HDMI电缆,它也不会掉落。它们总是在那里。 - Roni Tovi
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接