// 首先调用GetFileVersionInfoSize获取版本号长度
String MyName = "C:\\Maxthon.exe";
DWORD NoUse = 0; //没有什么用
DWORD InfoSize = ::GetFileVersionInfoSize(MyName.c_str(), &NoUse);
// 有效的长度
if (InfoSize > 0)
{
auto_ptr<char> VersionInfo(new char[InfoSize]);
if(true == ::GetFileVersionInfo(MyName.c_str(),NoUse,InfoSize,VersionInfo.get())) // 获取版本信息成功
{
char *pValue = NULL;
UINT ValueLen;
String FileInfo = "\\StringFileInfo\\";
//抄MSDN的代码
struct LANGANDCODEPAGE {
WORD wLanguage;
WORD wCodePage;
} *lpTranslate;
//default 0x0804 \StringFileInfo\lang-codepage\string-name
if (true == ::VerQueryValue(VersionInfo.get(), "\\VarFileInfo\\Translation", (LPVOID *)&lpTranslate, &ValueLen))
{
if (ValueLen / sizeof(LANGANDCODEPAGE) >= 1)
{
FileInfo = FileInfo + IntToHex(lpTranslate[0].wLanguage, 4)+ IntToHex(lpTranslate[0].wCodePage,4) + "\\"; // 这一步很关键哦
if (true == ::VerQueryValue(VersionInfo.get(), String(FileInfo + "ProductName").c_str(), (LPVOID *)&pValue, &ValueLen)) // 获取ProductName信息,ProductVersion等
{
String sSoftwareName = String(pValue); // 软件名称
}
}
}
posted on 2009-02-05 19:24
创建更好的解决方案 阅读(5389)
评论(4) 编辑 收藏 引用 所属分类:
C++专栏