终于知道如何获得显示器的物理尺寸了,虽然有局限,还是拿出来跟大家分享
这几天我一直在论坛上询问如何获得显示器的物理尺寸,而不是分辨率,而且获得的这个物理尺寸与分辨率也没有关系。现在我通过读取注册表中的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信息的,所以这个方法不能获得触摸屏的尺寸。