如何检测显示器是否是投影仪?

时间:2018-04-01 21:39:08

标签: c++ winapi multiple-monitors

有没有办法使用Windows API来检测特定显示器是投影仪(投影仪)而不是屏幕?

(我正在编写投影映射桌面应用程序,我希望能够自动检测投影机是否已连接并处于活动状态,以便用户将现实与预览进行比较。)

我已经使用EnumDisplayMonitors和EnumDisplayDevices来查找显示器,但我找不到显示器类型的任何标志或其他指示。我查看了DEVMODE和DISPLAY_DEVICE以及后者指向的注册表项。我没有看到可以区分屏幕和投影仪的DeviceCapabilities或GetDeviceCaps调用。我还查看了设备管理器,看看是否有一个属性区分我的常规显示器和投影机,但我找不到任何东西。所以也许没有办法做到这一点。

但是,屏幕分辨率控制面板小程序将投影机识别为" PROJECTOR"同时将我的主显示器识别为" Dell U3011。"使用EnumDisplayDevices,我可以得到戴尔U3011"来自DISPLAY_DEVICE的字符串,但是,对于投影仪,我只得到了#34; Generic PnP Monitor。"不知何故,小程序必须在其他地方寻找“#PRO; PROJECTOR"字符串或它显示" PROJECTOR"对于任何似乎是投影仪的通用PnP显示器。那么它的外观和知识是什么?

1 个答案:

答案 0 :(得分:2)

我相信答案是没有可靠的方法来做到这一点。

控制面板显示的“PROJECTOR”字符串是系统从EDID information拉出的任意文本。据我所知,Windows实际上并不“知道”显示器是投影仪还是LCD面板或CRT管。

EDID信息似乎没有标记来指示这是否是投影仪。我看到一个注意事项,投影仪通常会将一个或两个物理图像尺寸(以厘米为单位测量的尺寸)设置为零。但这是在EDID 1.4的描述中,我的大多数设备都使用EDID 1.3。实际上,我尝试的投影机都没有任何物理尺寸的0,所以它不是一个可靠的信号。