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

Adr*_*thy 10 c++ winapi multiple-monitors

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

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

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

但是,屏幕分辨率控制面板小程序将投影机识别为"PROJECTOR",同时将我的主显示器识别为"Dell U3011".使用EnumDisplayDevices,我可以从DISPLAY_DEVICE获得"Dell U3011"字符串,但是,对于投影仪,我只得到"Generic PnP Monitor".不知何故,小程序必须在其他地方寻找获得"PROJECTOR"字符串,或者它显示"PROJECTOR"用于任何似乎是投影仪的通用PnP监视器.那它看起来在哪里,它是如何知道的?

Adr*_*thy 2

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

控制面板显示的“PROJECTOR”字符串是系统从EDID 信息中提取的任意文本。据我所知,Windows 实际上并不“知道”显示器是投影仪、LCD 面板还是 CRT 显像管。

EDID信息似乎没有标志来表明这是否是投影仪。我看到一则说明,投影仪通常会将一个或两个物理图像尺寸(以厘米为单位测量)设置为零。但这是 EDID 1.4 的描述,而我的大多数设备都使用 EDID 1.3。事实上,我尝试过的投影仪的任何物理尺寸都不为 0,因此这不是一个可靠的信号。