首页 > 解决方案 > 如何获取与 PNPDeviceID ("SWD\MyEnumerator\MyInstance") 对应的 DeviceName ("\\.\DISPLAY1")?

问题描述

为了管理显示适配器和显示属性,我的代码使用了来自两个不同 Windows DLL 的 API:

cfgMgr32.dll

我使用 CfgMgr32(SetupApi 的继承者)中的函数来:

CfgMgr32(和 SetupApi)中的 API 使用以下形式的适配器 ID(称为DeviceInstanceIdPNPDeviceID):"SWD\MyEnumerator\MyInstance"

User32.dll

我使用 User32 中的函数来:

User32 中的 API 使用完全不同的适配器 id(称为DeviceName)的形式:"\\.\DISPLAY23"

(惊人的)问题:

似乎没有记录在这两种形式的唯一标识符之间的映射方式。我可以启用一个适配器,但是当我想更改它的方向或分辨率时,我无法知道返回的哪些标识符是EnumDisplayDevices(...)指我刚刚启用的同一个适配器。

我需要的 API 分布在两个库中;这两个库都没有提供一整套显示适配器管理功能。

这两个库都具有让您获取有关特定适配器的信息的功能,并且有一些小的重叠,但至关重要的是:没有什么是单个适配器所独有的。也许有一些方法可以明确地将属性从一侧关联到另一侧,但我已经丢弃了所有可用的信息(包括 SystemInformation、Screen.AllScreens、Wmi 查询,如 Win32_VideoController、DISPLAY_DEVICE ......)以及所有我能做到的信息找不到任何可映射的东西。

有没有人解决过这个问题,或者知道一些可能值得一看的开源项目?

标签: windowsuser32setupapi

解决方案


推荐阅读