#include <stdio.h>
#include <windows.h>
#ifndef nullptr
#define nullptr NULL
#endif
int _tmain(int argc, _TCHAR* argv[])
{
if (argc > 1)
{
DWORD dwSize = GetFileVersionInfoSize(argv[1], nullptr);
if (dwSize > 0)
{
BYTE* pBlock = (BYTE*)malloc(dwSize);
if (pBlock != nullptr)
{
if (GetFileVersionInfo(argv[1], 0, dwSize, pBlock))
{
VS_FIXEDFILEINFO* pFixedFileInfo = nullptr;
UINT uSize = 0;
if (VerQueryValue(pBlock, _T("\"), (void**)&pFixedFileInfo, &uSize) &&
(uSize == sizeof(VS_FIXEDFILEINFO)))
{
printf("File Version: %d.%d.%d.%d ",
pFixedFileInfo->dwFileVersionMS >> 16,
pFixedFileInfo->dwFileVersionMS & 0xFFFF,
pFixedFileInfo->dwFileVersionLS >> 16,
pFixedFileInfo->dwFileVersionLS & 0xFFFF);
printf("Product Version: %d.%d.%d.%d ",
pFixedFileInfo->dwProductVersionMS >> 16,
pFixedFileInfo->dwProductVersionMS & 0xFFFF,
pFixedFileInfo->dwProductVersionLS >> 16,
pFixedFileInfo->dwProductVersionLS & 0xFFFF);
}
}
free(pBlock);
pBlock = 0;
}
}
}
return 0;
}
这段代码用于从命令行参数中读取指定文件的版本信息,并打印出来。它首先获取文件的版本信息大小,然后分配内存存储该信息,接着通过GetFileVersionInfo和VerQueryValue函数获取并解析VS_FIXEDFILEINFO结构,最后输出文件版本和产品版本号。
1021





