如何获取与显示设置中完全一致的显示器ID?
获取与Windows显示设置一致的显示器ID
要拿到和显示设置里完全匹配的显示器ID(比如“显示器1”“显示器2”这类编号),可以通过以下几种可行方法实现:
方法1:使用Display Config API(最可靠)
Windows提供的Display Config系列API可以直接获取系统显示设置里的设备标识,核心步骤如下:
- 调用
DisplayConfigGetDevices枚举所有显示设备路径和模式信息 - 对每个目标设备,调用
DisplayConfigGetDeviceInfo获取DISPLAYCONFIG_TARGET_DEVICE_NAME结构体,其中的outputDeviceName字段就是和显示设置界面完全一致的显示器ID - 示例C#代码片段(需补充完整的P/Invoke声明):
using System.Runtime.InteropServices; public class DisplayConfigHelper { [DllImport("user32.dll", CharSet = CharSet.Unicode)] private static extern int DisplayConfigGetDevices( uint flags, ref uint numPathArrayElements, IntPtr pathArray, ref uint numModeInfoArrayElements, IntPtr modeInfoArray); [DllImport("user32.dll", CharSet = CharSet.Unicode)] private static extern int DisplayConfigGetDeviceInfo(ref DISPLAYCONFIG_DEVICE_INFO_HEADER requestPacket); // 需定义DISPLAYCONFIG_DEVICE_INFO_HEADER、DISPLAYCONFIG_TARGET_DEVICE_NAME等结构体 // 具体结构可参考微软官方文档 }
方法2:读取系统注册表
显示设置的显示器编号和注册表中的配置项关联,可通过以下路径遍历获取:
- 打开注册表路径
HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration - 遍历该路径下的所有子项,每个子项对应一个显示器的配置
- 查找子项中的
DisplayIdentifier键值,其内容就是显示设置里的显示器ID - 注意:注册表结构可能随Windows版本略有变化,需要做兼容性判断
方法3:关联EnumDisplayDevices与EDID信息
你之前用NativeMethods拿到的\.\DISPLAYx是系统内部设备路径,可通过EDID信息映射到显示设置的ID:
- 调用
EnumDisplayDevices获取每个显示器的DeviceID - 通过
SetupDiGetDeviceRegistryProperty读取设备的EDID数据 - 结合系统显示配置的映射关系,将内部路径关联到显示设置里的用户可见编号
注意:
\.\DISPLAYx是系统底层的设备标识,和显示设置里的编号没有直接的数字对应关系,必须通过上述映射方法才能匹配。
内容的提问来源于stack exchange,提问作者Anatoliy Katsimon
相关产品推荐
相关产品推荐

