2013-02-09 93 views
1

我都已经通过检查值发现了一个监控设备名称DEV_BROADCAST_DEVICEINTERFACE.dbcc_name,我尝试使用该设备名称的功能EnumDisplaySettings()内(该设备名称为第一个参数该功能)。非标准设备名称使用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()的所有显示设备,并确定刚连接到计算机的正确显示器/设备?

回答

1

我不能保证它,但我会猜想只要保持连接状态,显示设备就保留其名称。

根据这个假设,我会在程序启动时运行EnumDisplayDevices。连接新监视器时,再次使用EnumDisplayDevices,并将设备列表与先前列表进行比较,然后将EnumDisplaySettings(无论哪个设备新添加到列表中)都进行比较。

完成此操作后,将旧列表替换为新列表,然后准备下次用户插入另一台显示器。