1

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

我的问题:函数EnumDisplaySettings()总是返回 0,即失败。我相信它失败了,因为 MSDN 说的第一个参数EnumDisplaySettings()应该是 aDISPLAY_DEVICE.DeviceName returned from EnumDisplayDevices而我的设备名称是 from 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() 枚举所有显示设备并识别刚刚连接到计算机的正确监视器/设备?

4

2 回答 2

1

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

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

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

于 2013-02-09T05:32:39.873 回答
0

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

从 DEV_BROADCAST_DEVICEINTERFACE win32 编程访问 dbcc_name

如何从 DEV_BROADCAST_DEVICEINTERFACE 和设备实例 ID 中获取友好的设备名称

于 2013-02-10T06:05:32.527 回答