windows - 如何获取与 PNPDeviceID ("SWD\MyEnumerator\MyInstance") 对应的 DeviceName ("\\.\DISPLAY1")?
问题描述
为了管理显示适配器和显示属性,我的代码使用了来自两个不同 Windows DLL 的 API:
cfgMgr32.dll
我使用 CfgMgr32(SetupApi 的继承者)中的函数来:
- 枚举适配器(获取 id 和属性)
- 确定是否存在特定的适配器
- 确定适配器是否启用/禁用
- 启用/禁用适配器
- 注册回调以接收 PnP 设备事件
CfgMgr32(和 SetupApi)中的 API 使用以下形式的适配器 ID(称为DeviceInstanceId或PNPDeviceID):"SWD\MyEnumerator\MyInstance"
User32.dll
我使用 User32 中的函数来:
- 枚举适配器(获取 id 和属性)
- 查询适配器支持的分辨率
- 查询适配器当前的显示模式
- 更改适配器的当前方向
- 更改适配器的当前分辨率
User32 中的 API 使用完全不同的适配器 id(称为DeviceName)的形式:"\\.\DISPLAY23"
(惊人的)问题:
似乎没有记录在这两种形式的唯一标识符之间的映射方式。我可以启用一个适配器,但是当我想更改它的方向或分辨率时,我无法知道返回的哪些标识符是EnumDisplayDevices(...)
指我刚刚启用的同一个适配器。
我需要的 API 分布在两个库中;这两个库都没有提供一整套显示适配器管理功能。
这两个库都具有让您获取有关特定适配器的信息的功能,并且有一些小的重叠,但至关重要的是:没有什么是单个适配器所独有的。也许有一些方法可以明确地将属性从一侧关联到另一侧,但我已经丢弃了所有可用的信息(包括 SystemInformation、Screen.AllScreens、Wmi 查询,如 Win32_VideoController、DISPLAY_DEVICE ......)以及所有我能做到的信息找不到任何可映射的东西。
有没有人解决过这个问题,或者知道一些可能值得一看的开源项目?
解决方案
推荐阅读
- ios - 如何为自定义原型单元格中的进度条设置动画?
- javascript - How to get all active Mutation Observers on page?
- javascript - Antd AutoComplete does not retain input and rerenders as a tiny box
- javascript - Progressively add image (arrays)
- django - unresolved import 'rest_framework' after installing djangorestframework
- ios - How to create a UIView from a UITableViewCell button click on a separate UIViewController?
- excel - Extract only rows that are not in both sheets into a third sheet
- django - React put method not updating the user from Django
- c - Send data using writev() , receive data using readv()
- mongodb - mongodb initdb.js script fails when running "use somedbname"