将EnumDisplaySettings与非标准设备名称一起使用

时间:2013-02-09 04:58:19

标签: c++ winapi

我通过检查值DEV_BROADCAST_DEVICEINTERFACE.dbcc_name找到了显示器的设备名称,我试图在函数EnumDisplaySettings()中使用该设备名称(设备名称)是该函数的第一个参数)。

我的问题:函数EnumDisplaySettings()总是返回0,即失败。我认为它失败了,因为MSDN说EnumDisplaySettings()的第一个参数应该是DISPLAY_DEVICE.DeviceName returned from EnumDisplayDevices,而我的设备名称来自DEV_BROADCAST_DEVICEINTERFACE.dbcc_name

使用DEV_BROADCAST_DEVICEINTERFACE.dbcc_name我为第二台显示器获取设备名称\\?\DISPLAY#GSM3AD7#5&20a3f50d&0&UID513#{866519b5-3f07-4c97-b7df-24 c5d8a8ccb8},而EnumDisplayDevices()为我提供设备名称\\.\DISPLAYV1

是否可以使用EnumDisplaySettings(),其中第一个参数是从函数DEV_BROADCAST_DEVICEINTERFACE.dbcc_name中检索的设备名称?

我问的原因是:当第二台显示器连接到我要更改的计算机时,它监视显示设置。但是在监视器连接时,我通过DEV_BROADCAST_DEVICEINTERFACE.dbcc_name通知其设备名称(如上所述)与EnumDisplayDevices()为完全相同的设备返回的名称不同。而且我不知道如何通过使用EnumDisplayDevices()枚举所有显示设备来识别第二个监视器?有什么想法,我可以枚举使用EnumDisplayDevices()的所有显示设备,并识别刚刚连接到计算机的正确的监视器/设备?

2 个答案:

答案 0 :(得分:1)

我无法保证,但只要它保持连接,我就猜测显示设备会保留其名称。

根据这个假设,我会在你的程序启动时运行EnumDisplayDevices。连接新显示器后,再次使用EnumDisplayDevices,并将设备列表与之前的列表进行比较,然后将EnumDisplaySettings与新添加到列表中的设备进行比较。

完成后,将旧列表替换为新列表,并在下次用户插入另一台显示器时准备就绪。

答案 1 :(得分:0)

请查看以前的这些答案,以获取线索,帮助您将DEV_BROADCAST_DEVICEINTERFACE.dbcc_name值转换为合适的DISPLAY_DEVICE.DeviceName值:

acessing dbcc_name from DEV_BROADCAST_DEVICEINTERFACE win32 programming

How to get friendly device name from DEV_BROADCAST_DEVICEINTERFACE and Device Instance ID