win32获取文件版本信息
来源:互联网 发布:数据擦除机 编辑:程序博客网 时间:2024/05/21 09:49
1.使用GetFileVersionInfoSize函数获取版本信息大小
DWORD GetFileVersionInfoSize( LPCTSTR lptstrFilename, LPDWORD lpdwHandle);2.GetFileVersionInfo获取版本信息,需要先声明一个缓冲,大小为GetFileVersionInfoSize
BOOL GetFileVersionInfo( LPCTSTR lptstrFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData);
3.VerQueryValue获取语言和字符集信息
BOOL VerQueryValue( LPCVOID pBlock, LPCTSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen);其中,lpSubBlock为"\\VarFileInfo\\Translation"
返回的是一个WORD数组,存放在lplpBuffer
4.解析WORD组,获取对应的LANG和CODEPAGE
5.根据LANG和CODEPAGE对,查询对应的版本信息的具体内容
具体内容包括
比如查到的LANGUAGE为0, codepage为1200
那么本次查询对应文件版本的方法为调用VerQueryValue,lpSubBlock为"\\StringFileInfo\\00001200\\ProductVersion",返回的版本信息在lplpBuffer中。
具体的代码如下:
if(szFileOrgName != NULL && strlen(szFileOrgName) != 0 && (strcmp(szFileOrgName, "iexplore.exe") == 0 || strcmp(szFileOrgName, "IEEXPLORE.EXE") == 0))
{
#ifdef _DEBUG
MessageBox(NULL, "是IE浏览器", "提示", MB_OK);
#endif
DWORD dwHandle = 0;
DWORD dwSize = GetFileVersionInfoSize((LPCTSTR)szBrowserFileInfo, &dwHandle);
if(dwSize != 0)
{
char* szFileVersionInfo = new char[dwSize];
memset(szFileVersionInfo, 0, dwSize);
if(GetFileVersionInfo(szBrowserFileInfo, 0, dwSize, szFileVersionInfo) != 0)
{
UINT nVersionLength = 0;
DWORD* lpszVersion = NULL;
if(VerQueryValue(szFileVersionInfo, TEXT("\\VarFileInfo\\Translation"), (LPVOID*)&lpszVersion, &nVersionLength) != 0)
{
if(nVersionLength >= 4)
{
char* szProductVersion = NULL;
char* szSubBlock = new char[256];
UINT dwReadBtyes = 0;
memset(szSubBlock, 0, 256);
DWORD dwLangAndCodePage = (*lpszVersion);
WORD dwLang = (WORD)dwLangAndCodePage;
WORD dwCodePage = dwLangAndCodePage>>(sizeof(WORD)*8);
if(sprintf(szSubBlock, "\\StringFileInfo\\%04x%04x\\ProductVersion", dwLang, dwCodePage) > 0)
{
VerQueryValue(szFileVersionInfo, szSubBlock, (LPVOID*)&szProductVersion, (PUINT)&dwReadBtyes);
}
if(strstr(szProductVersion, "."))
{
int nFirstVersionLength = strstr(szProductVersion, ".") - szProductVersion;
if(nFirstVersionLength > 0)
{
char* sz = new char[2];
char* szFirstVersion = new char[nFirstVersionLength + 1];
memset(szFirstVersion, 0, nFirstVersionLength + 1);
memcpy(szFirstVersion, szProductVersion,nFirstVersionLength);
if(strlen(szFirstVersion) > 0 && strcmp(szFirstVersion, "6") == 0)
bIsIE6 = true;
delete szFirstVersion;
}
}
delete szSubBlock;
}
}
}
delete szFileVersionInfo;
}
}
- win32获取文件版本信息
- 获取文件版本信息
- 获取文件版本信息
- 获取文件版本信息
- 获取文件的版本信息
- c#获取文件版本信息
- C++获取文件版本信息
- 基于控制台或Win32 API程序生成文件版本信息
- Delphi 获取文件的版本等信息
- WINAPI 编程获取文件版本信息
- 从资源文件中获取版本信息
- 获取一个文件的版本信息
- 一行命令获取文件版本信息
- C#获取文件版本、文件大小等信息
- 【VB.NET】获取文件版本信息
- 获取文件或者动态库版本信息
- 如何给VC之Win32生成的.exe文件添加版本信息
- 获取版本信息
- cloudera 部署Hadoop
- Lua学习笔记 第九章 协同程序 —— coroutine
- 循环计数器LoopCount
- VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形(折线图,柱状图)
- C++中 string 的用法大全(转)
- win32获取文件版本信息
- STM32之中断与事件---中断与事件的区别
- 珠海PosiTector ®6000 F1涂层测厚仪总代理
- JAVA中String与StringBuffer的区别
- [昆仑叶哲华] 企业经营过程中如何加强企业成本管理
- Oracle 用dblink 跨库导数据
- CY5003 物联网士兵电子伤情 管理系统
- win7系统如何恢复或重装IE8浏览器呢
- 对于第七章 CONNECT程序的简单思考