2012-11-29 37 views
0

我有這樣的代碼 - 這是恢復該文件版本(進入一個結構) 我使用作爲例如SHELL32.DLL ,但也有一些我不明白它們的意義價值,並希望得到一個說明。如何使用GetFileVersionInfo函數?

這裏是代碼:

void GetFileVersion(PCHAR pFilePath ,PVERSION pRetVersion) 
{ 
DWORD    dwSize    = 0; 
BYTE    *pVersionInfo  = NULL; 
VS_FIXEDFILEINFO *pFileInfo   = NULL; 
UINT    pLenFileInfo  = 0; 


/*getting the file version info size */ 
dwSize = GetFileVersionInfoSize(pFilePath, NULL); 
if (dwSize == 0) 
{ 
    printf("Error in GetFileVersionInfoSize: %d\n", GetLastError()); 
    return; 
} 

pVersionInfo = new BYTE[ dwSize ]; /*allocation of space for the verison size */ 

if (!GetFileVersionInfo(pFilePath, 0, dwSize, pVersionInfo)) /*entering all info  data to pbVersionInfo*/ 
{ 
    printf("Error in GetFileVersionInfo: %d\n", GetLastError()); 
    delete[] pVersionInfo; 
    return; 
} 

if (!VerQueryValue(pVersionInfo, TEXT("\\"), (LPVOID*) &pFileInfo, &pLenFileInfo)) 
{ 
    printf("Error in VerQueryValue: %d\n", GetLastError()); 
    delete[] pVersionInfo; 
    return; 
} 


/*checking if the allocation succeeded */ 
if (NULL == pRetVersion) 
{ 
    printf("Allocation failed! \n" , GetLastError()); 
    return; 
} 


pRetVersion->major = (pFileInfo->dwFileVersionMS >> 16) & 0xffff ; 
pRetVersion->minor = (pFileInfo->dwFileVersionMS) & 0xffff; 
pRetVersion->hotfix = (pFileInfo->dwFileVersionLS >> 16) & 0xffff; 
pRetVersion->other = (pFileInfo->dwFileVersionLS) & 0xffff;  

} 
  1. 什麼的dwSize的含義是什麼?這只是文件版本大小?我在哪裏可以看到它,而點擊shell32.dll?

  2. pLenFileinfo - 這種規模是什麼?當我在看的VS_FIXEDFILEINFO的結構,只有版本信息資料,是否有WAE獲得比如

  3. File descriptionDate modifiedOriginal filename等? (「Details」中的所有其他屬性)?

謝謝!!!!!

+0

它在MSDN文檔中描述。請告訴我們你不明白的部分。 –

+1

我把它寫在代碼下 - 我不明白pLenInfoSize和dwSize的區別,版本是4位:例如1.2.3.4 - 所以它的大小應該是7個字符:28個字節?沒有? – user1386966

+0

我認爲你需要更仔細地閱讀文檔。例如,版本存儲在兩個DWORD中。它不存儲在文本中。 –

回答

4

的文件版本信息的長度是可變的。它包含許多不同的信息。所有這些不同部分的總長度由返回值GetFileVersionInfoSize給出。

當你調用VerQueryValue你所要求的總的版本信息中的特定個人的資料片。並且該特定部分的長度永遠不會大於整體大小。

VerQueryFile的文檔包含提取文件描述示例代碼。

+0

也許我錯過了一些東西 - 我得到的dwSize是1860年,pLenFileInfo是52.我的版本號是6.1.7601.17869。這些數字之間的關係是什麼?當我查看shell32.dll->細節並查看版本號時 - 這是我所瞭解的唯一版本,所以我不明白其他數字的含義。或者版本就是一切? (文件描述,類型,產品名稱等) – user1386966

+1

'pLenFileInfo'爲52,因爲它是'VS_FIXEDFILEINFO',它是13個DWORD。 'GetFileVersionInfoSize'的返回值較大,正如我在我的回答中所解釋的。因爲它有更多的信息。例如,文件描述。 –