【问题标题】:A reliable way to identify display devices?识别显示设备的可靠方法?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多