有谁使用过GetFkleVersionInfo这个api函数,能给我举个例子详细说说吗?谢谢!

解决方案 »

  1.   

    很久以前的代码,凑合看吧,那个namepath是文件路径;
    s1,s2什么的就不用说了吧var
      InfoSize , Zero : DWORD;
      VersionInfo ,Info : Pointer;
      Translation: PLANGANDCODEPAGE;
      InfoPath : String;
    begin
      InfoSize := GetFileVersionInfoSize(PChar(NamePath),Zero);
      if InfoSize = 0 then begin
        Exit;
      end;
      GetMem(VersionInfo,InfoSize);
      try
        if Not GetFileVersionInfo(PChar(NamePath),0,InfoSize,VersionInfo) then begin
                Exit;
        end;
        if VerQueryValue(VersionInfo, '\VarFileInfo\Translation', Pointer(Translation), InfoSize) then
        begin
          InfoPath := '\StringFileInfo\' + inttoHex(Translation^.wLanguage, 4) + inttoHex(Translation^.wCodePage, 4) + '\';
          GetMem(Info, 2000);
          VerLanguageName(Translation^.wLanguage, Info, 2000);
        end
        else begin//set default value
          InfoPath := '\StringFileInfo\040904E4\';
        end;    if VerQueryValue(VersionInfo, PChar(InfoPath + 'ProductVersion'), Info, InfoSize) then
          S1 := string(PChar(Info));  //版本;
        if VerQueryValue(VersionInfo, PChar(InfoPath + 'CompanyName'), Info, InfoSize) then
          S2 := string(PChar(Info)); //厂商;
        if VerQueryValue(VersionInfo, PChar(InfoPath + 'LegalTrades'), Info, InfoSize) then
          S3 := string(PChar(Info));  //
        if VerQueryValue(VersionInfo, PChar(InfoPath + 'FileDescription'), Info, InfoSize) then
          S4 := string(PChar(Info));  //描述;
      finally
        FreeMem(VersionInfo, InfoSize);
      end;
    end;