我用GetFileVersionInfo总是不成功,代码如下 char info[512];
if(GetFileVersionInfo(_T("c:\\adji.exe"),NULL,512,info)) {UINT cbTranslate=512;
TCHAR SubBlock[512];
TCHAR lpBuffer[512];
UINT dwBytes=512;
//if(VerQueryValue(info, TEXT("\\StringFileInfo\\040904E4\\CompanyName"),     (LPVOID*)&SubBlock, &dwBytes))
VerQueryValue(info, 
              TEXT("\\VarFileInfo\\Translation"),
              (LPVOID*)&lpTranslate,
              &cbTranslate);// Read the file description for each language and code page.
HRESULT hr;
for( int i=0; i < (cbTranslate/sizeof(struct LANGANDCODEPAGE)); i++ )
{
  hr = StringCchPrintf(SubBlock, 50,
            TEXT("\\StringFileInfo\\%04x%04x\\CompanyName"),
            (STRSAFE_LPWSTR)lpTranslate[i].wLanguage,
            (STRSAFE_LPWSTR)lpTranslate[i].wCodePage);
if (FAILED(hr))
{
// TODO: write error handler.
}if(VerQueryValue(info,SubBlock ,     (LPVOID*)&SubBlock, &dwBytes))
MessageBox((LPCTSTR)SubBlock);
}
function::GetMyLastError();
}按照msdn上的试了n次,都没用!不知道大家怎么获得一个exe文件的信息,比如公司、版本号、内部文件名之类的!

解决方案 »

  1.   

    有 VERSIONINFO Resource 的文件才能成功。
    你试的文件是没有VERSIONINFO Resource。
    You can add version information to any files that can have Microsoft&#174; Windows&#174; resources, such as dynamic-link libraries (DLLs), executable files, or font files. To add the information, create a VERSIONINFO Resource and use the resource compiler to compile the resource.
    char info[512]; 《==GetFileVersionInfoSize  代替512。
      

  2.   

    up  GetFileVersionInfo函数被用来获取包含在指定文件中的版本信息。其Delphi函数声明如下:function GetFileVersionInfo(
    lptstrFilename: PChar; // 文件名
    dwHandle: DWORD; // 忽略
    dwLen: DWORD; // 缓冲区大小
    lpData: Pointer // 版本信息缓冲区
    ): BOOL; stdcall;   参数说明:  lptstrFilename,一个以NULL结束字符串,它指定了期望从中获取版本详细的文件名。如果文件名不包含完整路径,函数将使用LoadLibrary函数的默认搜索次序进行搜索。在Windows 95/98/Me操作系统中路径名不能超过126个字符。  dwHandle,这个参数没有使用,将被忽略。  dwLen,请先调用GetFileVersionInfoSize函数确定文件版本信息的字节数大小。dwLen必须等于或大于这个值。如果lpDate指向的缓冲区空间不够,函数将根据实际大小裁减出文件的版本信息。  lpData,指向一个用于保存函数调用后返回的文件版本信息的缓冲区。  如果函数调用成功,它将返回True;否则返回False。可通过GetLastError函数得到扩展的错误信息。  在调用GetFileVersionInfo函数前必须先调用GetFileVersionFileSize。为了从文件版本信息中获取有用信息,必须使用VerQueryValue函数。  1.2. GetFileVersionInfoSize函数  GetFileVersionInfoSize函数被用来判断操作系统是否能够从指定文件中获取版本信息。如果存在版本信息,便返回以字节为单位的这些信息所占用空间的大小。其Delphi函数声明如下:function GetFileVersionInfoSize(
    lptstrFilename: PChar; // 文件名
    var lpdwHandle: DWORD // set to zero
    ): DWORD; stdcall;   参数说明:  lptstrFilename,一个以NULL结束字符串,它指明期望从哪个文件中获取版本信息的文件名。  lpdwHandle,一个指向将被函数设置为0的变量的指针。  如果函数调用成功,它将返回文件版本信息的字节大小;否则返回0,可通过GetLastError函数得到扩展的错误信息。  在调用GetFileVersionInfo函数前应先调用GetFileVersionInfoSize函数。GetFileVersionInfoSize函数的返回值确定了GetFileVersionInfo函数所使用的版本信息缓冲区的大小。
      

  3.   

    把缓冲区设置大一些,的确可以接到信息,不过都是乱码,如:&#52428;&#52428;&#52428;&#52428;&#52428;&#52428;,
    而且那个 国家代码页多种多样,添加监视后可以见一下几种:"\StringFileInfo\080404b0\CompanyName"
    "\StringFileInfo\080403a8\CompanyName"
    "\StringFileInfo\040904e4\CompanyName" 至于schwarzenegger(找不到服务器)说只是对于有版本资源文件的才可以获取,这个我知道,大部分的软件都含有相关信息的,微软的资源管理器默认就会显示那些,我拿来做试验的都是有版本信息的exe文件!    函数声明或介绍,msdn上都有,我只是不知道问题出在哪,希望大家帮助一起测试测试!