我通过检查值 DEV_BROADCAST_DEVICEINTERFACE.dbcc_name
找到了监视器的设备名称,我正尝试在函数 EnumDisplaySettings 中使用该设备名称()
(设备名称是该函数的第一个参数)。
我的问题:EnumDisplaySettings()
函数总是返回 0,即失败。我相信它失败了,因为 MSDN 说 EnumDisplaySettings()
的第一个参数应该是从 EnumDisplayDevices 返回的 DISPLAY_DEVICE.DeviceName
而我的设备名称来自 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() 枚举所有显示设备并识别刚刚连接到计算机的正确显示器/设备的任何想法?
最佳答案
我不能保证,但我猜测只要显示设备保持连接状态,它就会保留其名称。
在那个假设下,我会运行 EnumDisplayDevices
当你的程序启动时。连接新显示器时,使用 EnumDisplayDevices
再次将设备列表与之前的列表进行比较,然后是 EnumDisplaySettings
在新添加到列表中的任何设备上。
完成后,将旧列表替换为新列表,您就可以为下次用户插入另一台显示器做好准备。
关于c++ - 将 EnumDisplaySettings 与非标准设备名称一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14785138/