终于知道如何获得显示器的物理尺寸了,虽然有局限,还是拿出来跟大家分享

twins222 2009-09-09 06:19:48
这几天我一直在论坛上询问如何获得显示器的物理尺寸,而不是分辨率,而且获得的这个物理尺寸与分辨率也没有关系。现在我通过读取注册表中的EDID的方法终于读出来了,虽然换到其他电脑上的时候,需要将程序中EDID在注册表中的位置进行修改,但是也算是读取同型号电脑显示器尺寸的一个方法。现在将代码贴出如下,并简单附加一些注释.
#include <windows.h>
#include "stdio.h"
void GetMonitorType(BYTE *MonitorType, ULONG siz)
{
LPTSTR regkey = "SYSTEM\\CurrentControlSet\\Enum\\DISPLAY\\BNQ7801\\4&24f62dc0&0&80861100&00&02\\Device Parameters"; //该位置需要根据不同的显示器进行修改
LPTSTR regitem = "EDID";
ULONG dType = REG_BINARY;
HKEY hKey;
long a;
a=RegOpenKeyEx(HKEY_LOCAL_MACHINE, regkey, 0, KEY_READ, &hKey);
if (a==0)
{
RegQueryValueEx(hKey, regitem, NULL, &dType, MonitorType, &siz);
RegCloseKey(hKey);
}
}
void main()
{
BYTE type[256];
GetMonitorType(type, 256);
int width,highth;
width=(int)type[66];//4行
highth=(int)type[67];//5行
width=width+(int)((type[68]&0xf0)>>4)*256;//6行
highth=highth+(int)(type[68]&0x0f)*256;//7行
//4行,5行,6行,7行利用的是EDID的第66,67,68位上的数据(从0开始),表示的就是长度和宽度。如果不懂这块是怎么处理的,可以联系我。qq:375308292
printf("%d ",width);
printf("%d ",highth);

}
当然我这个方法很有局限性,肯定还有其他读取EDID的方法,具体我就没有去研究了,如果谁有其他方法的程序不妨共享一下。还有触摸屏一般是没有EDID信息的,所以这个方法不能获得触摸屏的尺寸。
...全文
1291 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
nnoqh 2010-09-13
  • 打赏
  • 举报
回复
在无忧论坛LXL1638已经提供过源码了,是一个自动设置显示器分辨率的软件,源码是C语言的,里面有怎么读取EDID信息,你可以下载看看。
ilovechao1314 2009-11-25
  • 打赏
  • 举报
回复
mark
twins222 2009-09-11
  • 打赏
  • 举报
回复
以上内容算是一个小的总结吧,对于一般显示器来说,上面的程序虽然局限性太大,但是我现在只有时间弄这些了,以后有时间再继续通过其他方法读取EDID。
还有,我通过查资料,听网上的朋友说,触摸屏真的是没有EDID信息,也真的是读不出来型号这些参数。所以我没有查到任何能读出触摸屏这些参数的说法,所以我也没有办法获得了,只能这样了。结贴,再次谢谢各位了。
twins222 2009-09-10
  • 打赏
  • 举报
回复
谢谢大家的支持,有什么新的进展我在同大家分享。也很谢谢那些在其他帖子帮助过我的人呵呵
用户 昵称 2009-09-10
  • 打赏
  • 举报
回复
支持一下!
skynfly 2009-09-10
  • 打赏
  • 举报
回复
谢谢LZ,真是好心人
twins222 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 stjay 的回复:]
可以从驱动方面入手啊
[/Quote]
但是一般显示器是即插即用的,不需要驱动啊。而触摸屏我现在还在研究当中,但是触摸屏没有EDID信息,让我很头痛。
twins222 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 initialj 的回复:]
我是说看spec或者问厂商,问他们有没有烧录EDID,还是将信息存到其他地方了
[/Quote]
我问了一个做触摸屏的工程师 他说没有EDID,然后那些参数也无法读出来。看来我真的是白忙活了...
InitialJ 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 twins222 的回复:]
引用 21 楼 initialj 的回复:
触摸屏没有spec吗,或者直接去问厂商好了

当然可以查找说明书或者问厂商了,但是那样不能满足我们的要求,必须用程序读到,呵呵
[/Quote]
我是说看spec或者问厂商,问他们有没有烧录EDID,还是将信息存到其他地方了
twins222 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 initialj 的回复:]
触摸屏没有spec吗,或者直接去问厂商好了
[/Quote]
当然可以查找说明书或者问厂商了,但是那样不能满足我们的要求,必须用程序读到,呵呵
InitialJ 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 twins222 的回复:]
引用 19 楼 initialj 的回复:

触摸屏的型号应该也是存在EDID中的

一般显示器的厂商信息,型号,ID,分辨率啊,基本所有的显示器信息都在EDID中,但是触摸屏没有该信息,所以让我不知道怎么才能将它读出来
[/Quote]
触摸屏没有spec吗,或者直接去问厂商好了
twins222 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 initialj 的回复:]

触摸屏的型号应该也是存在EDID中的
[/Quote]
一般显示器的厂商信息,型号,ID,分辨率啊,基本所有的显示器信息都在EDID中,但是触摸屏没有该信息,所以让我不知道怎么才能将它读出来
InitialJ 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 twins222 的回复:]
引用 17 楼 initialj 的回复:
一般电脑是通过I2C读取EDID的,不知道你的触摸屏和电脑之间有没有I2C连接,还有如果触摸屏没有烧录EDID的话是不可能读出来的。

我问过制作触摸屏的一个网友,他说触摸屏没有烧录EDID,所以我现在想改读触摸屏的型号,不知道怎么读?
[/Quote]
触摸屏的型号应该也是存在EDID中的
twins222 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 initialj 的回复:]
一般电脑是通过I2C读取EDID的,不知道你的触摸屏和电脑之间有没有I2C连接,还有如果触摸屏没有烧录EDID的话是不可能读出来的。
[/Quote]
我问过制作触摸屏的一个网友,他说触摸屏没有烧录EDID,所以我现在想改读触摸屏的型号,不知道怎么读?
InitialJ 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 twins222 的回复:]
引用 15 楼 tr0j4n 的回复:
没做过触屏,不好意思。你难道在做Win7的相关开发?

哈哈,没有。只是工作中需要这个参数。我又找了很多资料,似乎这个触摸屏的真的读不出来呢呵呵。继续搞...
[/Quote]
一般电脑是通过I2C读取EDID的,不知道你的触摸屏和电脑之间有没有I2C连接,还有如果触摸屏没有烧录EDID的话是不可能读出来的。
twins222 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tr0j4n 的回复:]
没做过触屏,不好意思。你难道在做Win7的相关开发?
[/Quote]
哈哈,没有。只是工作中需要这个参数。我又找了很多资料,似乎这个触摸屏的真的读不出来呢呵呵。继续搞...
MoXiaoRab 2009-09-10
  • 打赏
  • 举报
回复
没做过触屏,不好意思。你难道在做Win7的相关开发?
twins222 2009-09-10
  • 打赏
  • 举报
回复
顶一下,不然又被埋没在提问的海洋中了。关于触摸屏大家有什么想法建议提一下。谢了。
lang528 2009-09-09
  • 打赏
  • 举报
回复
学习了!
stjay 2009-09-09
  • 打赏
  • 举报
回复
可以从驱动方面入手啊
加载更多回复(7)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧