发新话题
打印

Delphi 获取DLL文件中的版本信息

GetFileVersionInfo这个API可以完成你的要求

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 + 'LegalTrademarks '), 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;
换个头像,看见广告就眼红,直接封ID。

TOP

发新话题