【问题标题】:Get Exact Monitor/Display/Screen Name获取确切的监视器/显示器/屏幕名称
【发布时间】:2013-02-20 20:15:46
【问题描述】:

我有一个程序,用户可以选择目标监视器,但我无法获得真正的监视器 名称/型号。

我已经尝试了以下方法:

  • Screen.AllScreens 没有用;
  • WMI 和 Win32 EnumDisplayDevices 都返回通用 PnP 监视器;
  • 设备管理器还显示通用 PnP 监视器...

在资源管理器中附有监视器的实际名称,在珠穆朗玛峰中,它显示了更详细的细节......

这两个程序从哪里获得这些信息?我遇到的最后一个选项 是从注册表中解析 EDID ... 有没有人试过这个并且有效?

【问题讨论】:

  • 在您对此感到厌烦之前,您将如何处理两台显示器的品牌和型号完全相同的非常常见情况?
  • 我并不担心......我想,我可以根据屏幕边界确定屏幕的位置,例如。左,右等。如果只有两个,我可以将主要附加到主要的。但在我走到这一步之前,我必须先得到这些信息。

标签: c# winforms desktop-application


【解决方案1】:

好吧,这个问题很老了,但是,为了 google 重定向,我建议使用“WindowsDisplayAPI”库。

https://www.nuget.org/packages/WindowsDisplayAPI


使用该库,有多种方法可以获取显示名称。最简单的方法是:

foreach (var display in Display.GetDisplays())
{
    Console.WriteLine(display.DeviceName);
}

但这是使用旧 API,如果您确定您的程序至少针对 Windows Vista,我建议使用以下代码:

foreach (var target in DisplayConfig.PathDisplayTarget.GetDisplayTargets())
{
    Console.WriteLine(target.FriendlyName);
}

【讨论】:

  • 是的 - 经过一个晚上的搜索 - 这将所有不同的方法结合在一起。只有 64kb 才能启动。谢谢@Sorush
【解决方案2】:

看起来这可能已经在另一个问题中得到了回答: How do i get the actual monitor name as seen in the resolution dialog

【讨论】:

  • 我已经阅读了那篇文章,但在 setup api 库中找不到任何可以为我提供所需数据的函数。
猜你喜欢
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多