是否可以检测连接到Windows PC的显示器是否正在主动显示某个输入?

时间:2014-02-12 18:52:11

标签: c# wpf winapi vnc vesa

我正在开发一个支持通过VNC进行远程显示的Windows应用程序。通常,远程显示器将是唯一的可视界面。但是,有些情况下用户希望使用物理监视器查看应用程序。如果连接了物理连接的监视器切换到特定输入(可能是DVI或HDMI),我需要能够检测到并关闭VNC。 是否可以检测连接的显示器是否正在显示某个输入?

我知道我可以通过Screen.AllScreens获得有关附加监视器的一些信息,但其中没有任何内容似乎与我需要的完全匹配。是否有一些Windows API公开的方法可以提供这些信息?是否可以从VESA / DDC确定必要的信息?

1 个答案:

答案 0 :(得分:2)

我没有任何开发VNC应用程序的经验,但也许一个建议可能会让你走上正确的道路。

下载wmiexplorer

  1. 运行程序
  2. 在这里,您可以探索WMI中的不同类,这将是我认为您将获得的最低级别
  3. 转到“查询”标签,然后输入查询:"select * from Win32_DesktopMonitor"
  4. 我认为这是您可以用来计算有关显示器信息的信息。 (我不确定哪些类有与监视器相关的信息)

    特别是,请查看Availability以获取Win32_DesktopMonitor类。

    <强>更新

    在远程计算机上运行此查询说明和DeviceID和名称作为“默认监视器”返回。在我的真机上,它以“Generic PnP Monitor”的形式返回,并且设置了MonitorManufacturer,远程机器没有。您甚至可以将查询的监视器与Screen分辨率或查询中返回的SystemName进行比较,而不是运行应用程序的计算机的系统名称。

    使用ManagementObjectSearcher执行WMI查询。

    修改

    您还可以对设备进行映射/交叉检查,如here所示。请注意,ClassGUID在MonitorDesktop和PnPEntity之间是相同的。