我通过检查值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()的所有显示设备,并识别刚刚连接到计算机的正确的监视器/设备?
答案 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