//////////////////////////////////////////////////////////////
//
// File: version.cpp
// Description: Sample code for getting version info
// Created: 2008-1-4
// Author: Ken Zhang
// E-Mail: cpp.china@hotmail.com
//
//////////////////////////////////////////////////////////////
/*
The following code shows how to get FILEINFO value from resource file.
These WIN32 functions will be used:
* GetFileVersionInfo
* GetFileVersionInfoSize
* VerQueryValue
* GetModuleFileName
*/
#include <windows.h>
#include <tchar.h>
#include <string>
#include <iostream>
#pragma comment(lib, "version.lib")
using namespace std;
bool GetFileVersion(HMODULE hModule, WORD *pBuffer)
{
TCHAR fname[MAX_PATH];
VS_FIXEDFILEINFO *pVi;
DWORD dwHandle;
string str;
if (::GetModuleFileName(hModule, fname, MAX_PATH))
{
int size = GetFileVersionInfoSize(fname, &dwHandle);
if (size > 0) {
BYTE *buffer = new BYTE[size];
if (GetFileVersionInfo(fname, dwHandle, size, buffer)) {
if (VerQueryValue(buffer, _T("//"), (LPVOID *)&pVi, (PUINT)&size)) {
pBuffer[0] = HIWORD(pVi->dwFileVersionMS);
pBuffer[1] = LOWORD(pVi->dwFileVersionMS);
pBuffer[2] = HIWORD(pVi->dwFileVersionLS);
pBuffer[3] = LOWORD(pVi->dwFileVersionLS);
delete buffer;
return true;
}
}
delete buffer;
}
}
return false;
}
string GetFileVersion(HMODULE hModule)
{
string str;
WORD buffer[4];
if (GetFileVersion(hModule, buffer))
{
char str2[32];
for (int i = 0; i < sizeof(buffer)/sizeof(WORD); i++)
{
itoa(buffer[i], str2, 10);
str += str2;
if (i != sizeof(buffer)/sizeof(WORD) - 1)
{
str += ".";
}
}
}
return str;
}
void main()
{
cout << "Current version is: " << GetFileVersion(::GetModuleHandle(NULL)) << endl;
}
Get File Version in your code
最新推荐文章于 2023-08-26 07:45:00 发布
本文介绍了一种使用C++实现的方法来获取Windows环境下程序文件的版本信息。通过调用GetFileVersionInfo等API函数,演示了如何从资源文件中读取FILEINFO值,并将其转换为易于理解的版本号字符串。
1万+

被折叠的 条评论
为什么被折叠?



