c++ - 将 EnumDisplaySettings 与非标准设备名称一起使用

标签 c++ winapi

我通过检查值 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/

相关文章:

c++ - 当其他构造函数存在时,为什么 "ctor() = default"会改变行为?

c++ - for语句中自动变量的推导类型

c++ - 可以将两个连续的相同类型的数组视为一个吗?

c++ - 阻止 Win32 应用程序的所有 Windows Internet 访问

windows - 如何创建名称大小写不同的目录? (区分大小写的 CreateDirectory 函数)

c++ - 在 Windows 上安装 GCC

c++ - 在 C++ 中为 map 自动生成键

c++ - WinAPI 获取对另一个应用程序控件的访问权限

c++ - 当条件产生时结束线程。 C/C++

c++ - 最小化应用程序时停止播放声音和音量