【问题标题】:Is it possible to detect whether a monitor attached to a Windows PC is actively displaying a certain input?是否可以检测连接到 Windows PC 的监视器是否正在主动显示某个输入?
【发布时间】:2014-03-11 07:32:13
【问题描述】:
我正在开发一个通过 VNC 支持远程显示的 Windows 应用程序。通常,远程显示器将是唯一的可视界面。但是,在某些情况下,用户会希望使用物理监视器查看应用程序。如果连接了物理连接的监视器并切换到特定输入(可能是 DVI 或 HDMI),我需要能够检测到并关闭 VNC。 是否可以检测连接的监视器是否正在主动显示某个输入?
我知道我可以使用Screen.AllScreens 获得有关所连接显示器的一些信息,但其中似乎没有什么与我需要的完全匹配。 Windows API 是否有一些方法可以为我提供这些信息?是否可以从 VESA/DDC 确定必要的信息?
【问题讨论】:
标签:
c#
wpf
winapi
vnc
vesa
【解决方案1】:
我没有任何开发 VNC 应用程序的经验,但也许一个建议可能会让你走上正确的道路。
下载wmiexplorer
- 运行程序
- 在这里您可以探索 WMI 中的不同类,我认为您将获得的最低级别
- 转到查询选项卡并输入查询:
"select * from Win32_DesktopMonitor"
我认为这是您可以用来找出有关您的显示器的信息的信息。 (我不确定哪些类有与监视器相关的信息)
特别是,请查看 Availability 的 Win32_DesktopMonitor 类。
更新
在远程计算机上运行此查询描述和设备 ID 和名称返回为“默认监视器”。在我的真实机器上,它以“通用 PnP 监视器”的形式返回,并设置了 MonitorManufacturer,而远程机器没有。您甚至可以将查询的监视器与Screen 分辨率或查询中返回的SystemName 与运行应用程序的计算机的系统名称进行比较。
使用ManagementObjectSearcher 执行 WMI 查询。
编辑
您还可以像here 所示的示例那样对设备进行映射/交叉检查。注意 ClassGUID 在 MonitorDesktop 和 PnPEntity 之间是相同的。