IE版本信息的获取:从mshtml.dll获取到的和IE的“关于“获取的版本不一致

来源:互联网 发布:淘宝客自动发送微信群 编辑:程序博客网 时间:2024/06/08 08:12

项目中获取的IE的版本号信息,我使用了如下的方法:

//获取ie版本号#include "Winver.h"#pragma comment(lib,"Version.lib")CString GetIeVersionFromFile(){const TCHAR szFilename[] = _T("mshtml.dll");DWORD dwMajorVersion = 0, dwMinorVersion = 0;DWORD dwBuildNumber = 0, dwRevisionNumber = 0;DWORD dwHandle = 0;DWORD dwVerInfoSize = GetFileVersionInfoSize(szFilename, &dwHandle);//判断容纳文件版本信息需要一个多大的缓冲区if (dwVerInfoSize){LPVOID lpBuffer = LocalAlloc(LPTR, dwVerInfoSize);//从堆中分配指定大小的字节数if (lpBuffer){//从支持版本标记的一个模块里获取文件版本信息if (GetFileVersionInfo(szFilename, dwHandle, dwVerInfoSize, lpBuffer)){VS_FIXEDFILEINFO * lpFixedFileInfo = NULL;UINT nFixedFileInfoSize = 0;if (VerQueryValue(lpBuffer, TEXT("\\"), (LPVOID*)&lpFixedFileInfo, &nFixedFileInfoSize) && (nFixedFileInfoSize)){//从版本资源中获取信息dwMajorVersion = HIWORD(lpFixedFileInfo->dwFileVersionMS);//主版本号dwMinorVersion = LOWORD(lpFixedFileInfo->dwFileVersionMS);//福版本号dwBuildNumber = HIWORD(lpFixedFileInfo->dwFileVersionLS);//编译版本号dwRevisionNumber = LOWORD(lpFixedFileInfo->dwFileVersionLS);//修订版本号}}LocalFree(lpBuffer);}}else{return _T("");}TCHAR buf[512] = { 0 };wsprintf(buf, _T("%d.%d.%d.%d"), dwMajorVersion, dwMinorVersion, dwBuildNumber, dwRevisionNumber);OutputDebugString(buf);CString strIEVer = buf;return strIEVer;}

这个dll的百度知道的解释中https://baike.baidu.com/item/mshtml.dll/10967788?fr=aladdin有一点内容说:

“说明:一般只要缺少这个核心部件的话.IE会出现无法使用的情况.是有关 IE html 网页解释的应用扩展数据链接库
mshtml.dll (6.0.2800.1400),它的版本和自己的IE版本是匹配的,“
也许这个是在较早的系统上会保持一致的。但是现在我发现有些系统上这个是不一致的。

大部分的机子上都是一致的,但是有个别的xp系统和win10系统中的ie是不一致的。经过调查,发生这个不一致的xp系统的ie本身损坏,就进行了升级;而windows10的不一致是表现为ie显示的版本的号的10.0.9200.17457,而用这个方法获取到的是10.17457.0.9200(这里用我用的机子的ie的版本号举例)的样子;

后来就在注册表内找到ie的版本信息,调查了十多台xp、win7,win10,后发现都是一致,于是就采用注册表获取的方法:

BOOL GetRegQueryValue(HKEY hKey, LPCTSTR lpSubKey,LPCTSTR lpValueName, LPTSTR szQueryValue){HKEY hResult;LONG nResult;BOOL b64OS = OSVersion::Is64BitOs();if( b64OS == TRUE ){nResult = RegOpenKeyEx(hKey, lpSubKey, 0, KEY_READ|KEY_WOW64_64KEY, &hResult);}else{nResult = RegOpenKeyEx(hKey, lpSubKey, 0, KEY_READ|KEY_WOW64_32KEY, &hResult);}if(ERROR_SUCCESS != nResult){return FALSE;}DWORD lValueSize = 256, dwType = REG_SZ;nResult = RegQueryValueEx(hResult, lpValueName, NULL, &dwType, (LPBYTE)szQueryValue, &lValueSize);if(ERROR_SUCCESS != nResult){RegCloseKey(hResult);return FALSE;}RegCloseKey(hResult);return TRUE;}CString GetIeVersionFromReg(){CString strIeVersion;CString strRegPath = _T("SOFTWARE\\Microsoft\\Internet Explorer");TCHAR szVersion[256] = {0};if( GetRegQueryValue(HKEY_LOCAL_MACHINE, strRegPath, _T("svcVersion"), (LPTSTR)szVersion )){strIeVersion = szVersion;}else if( GetRegQueryValue(HKEY_LOCAL_MACHINE, strRegPath, _T("Version"), (LPTSTR)szVersion )){strIeVersion = szVersion;}else{strIeVersion = GetIeVersionFromFile();}return strIeVersion;}


原创粉丝点击