我正在开发一个支持通过VNC进行远程显示的Windows应用程序。通常,远程显示器将是唯一的可视界面。但是,有些情况下用户希望使用物理监视器查看应用程序。如果连接了物理连接的监视器和切换到特定输入(可能是DVI或HDMI),我需要能够检测到并关闭VNC。 是否可以检测连接的显示器是否正在显示某个输入?
我知道我可以通过Screen.AllScreens
获得有关附加监视器的一些信息,但其中没有任何内容似乎与我需要的完全匹配。是否有一些Windows API公开的方法可以提供这些信息?是否可以从VESA / DDC确定必要的信息?
答案 0 :(得分:2)
我没有任何开发VNC应用程序的经验,但也许一个建议可能会让你走上正确的道路。
"select * from Win32_DesktopMonitor"
我认为这是您可以用来计算有关显示器信息的信息。 (我不确定哪些类有与监视器相关的信息)
特别是,请查看Availability以获取Win32_DesktopMonitor类。
<强>更新强>
在远程计算机上运行此查询说明和DeviceID和名称作为“默认监视器”返回。在我的真机上,它以“Generic PnP Monitor”的形式返回,并且设置了MonitorManufacturer
,远程机器没有。您甚至可以将查询的监视器与Screen
分辨率或查询中返回的SystemName
进行比较,而不是运行应用程序的计算机的系统名称。
使用ManagementObjectSearcher执行WMI查询。
修改强>
您还可以对设备进行映射/交叉检查,如here所示。请注意,ClassGUID
在MonitorDesktop和PnPEntity之间是相同的。