// 首先調用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
創建更好的解決方案 閱讀(5462)
評論(4) 編輯 收藏 引用 所屬分類:
C++專欄