【问题标题】:Use EnumDisplaySettings with non-standard Device Name将 EnumDisplaySettings 与非标准设备名称一起使用
【发布时间】:2013-02-09 04:58:18
【问题描述】:

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

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      查看这些先前的答案以获取帮助您将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

      【讨论】:

        猜你喜欢
        • 2019-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-10
        • 2021-10-11
        • 1970-01-01
        • 2012-04-16
        相关资源
        最近更新 更多