gpt4 book ai didi

vb6 - 如何通过 VB6.0 从 EDID 文件中获取连接显示器的原始分辨率?

转载 作者:行者123 更新时间:2023-12-04 14:07:35 26 4
gpt4 key购买 nike

我正在开发一个 VB 应用程序,我需要知道显示器的原始分辨率,而不是用户设置的分辨率(当前分辨率)。所以我需要直接从显示器读取 EDID(扩展显示识别数据)。

我确实尝试通过一些程序找到显示器的分辨率...但它返回的只是当前分辨率。直接从显示器的 EDID 读取信息的任何帮助都是适用的。

提前致谢

最佳答案

经过大量研究,我能够解决我的问题..感谢 Yahia 提供的宝贵信息。

首先,我们需要找到 EDID 数据。物理显示信息实际上可通过扩展显示标识数据 (EDID) 提供给操作系统。 EDID block 的副本保存在 Windows 注册表中。但问题是如何获得正确的 EDID,因为注册表存储了有关在任何时间点连接到系统的所有显示器的信息。因此,首先我们使用一个 WMI 类“Win32_DesktopMonitor”,并通过一个简单的 SQL 查询获取 PNP 设备 ID 以查找可用(非离线)的监视器。然后我们可以深入注册表以查找数据。

`'for wmiquery('Select * from Win32_DesktopMonitor'):

regkey = ('HKLM\SYSTEM\CurrentControlSet\Enum\' + monitor.PNPDeviceID + '\Device Parameters\EDID') edid = get_regval(regkey)'`

其次,需要对数据进行解析。显示器的基本 EDID 信息在包含相关制造商和操作相关数据的 128 字节数据结构中传送。这些信息中的大部分对我们来说都是无趣的。

要了解 NATIVE 分辨率,我们需要开始查看从字节 = 54 开始的 DTD(详细时序描述符)。

以下是从EDID中寻找最大分辨率的逻辑

`dtd = 54 # 详细时序描述的起始字节。

水平分辨率 = ((edid[dtd+4] >> 4) << 8) |编辑[dtd+2]verticalRes = ((edid[dtd+7] >> 4) << 8) |编辑[dtd+5]res=(horizo​​ntalRes,verticalRes)`

获得的值是十六进制值,可以将其转换为十进制值以找到以像素为单位的原始分辨率。

谢谢希望能帮助到你萨钦

关于vb6 - 如何通过 VB6.0 从 EDID 文件中获取连接显示器的原始分辨率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10073261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com