深圳全飞鸿

标题: delphi获取程序版本的实现标准getVersion [打印本页]

作者: admin    时间: 2019-6-25 22:36
标题: delphi获取程序版本的实现标准getVersion
首先在XC的看板程序上验证:


function TDataModule2.getVersion(myappname: string): string;
var
   TransBuffer,syant_buffer,VersionPointer: pchar;
   Translen, dump,size,vallen: UInt;
   Temp: integer;
   CalcLangCharSet,FLangCharSet:string;
   current_version:string;
begin
     result:='0.0.0.2';
     size := GetFileVersionInfoSize(pchar(myappname), dump);
     if  size <> 0 then
     begin
          syant_buffer := StrAlloc(size+1);
          try
                if not GetFileVersionInfo(Pchar(myappname), 0, size, syant_buffer) then
                begin
                    result:='0.0.0.3';
                end  else
                begin
                      VerQueryValue(syant_buffer, '\VarFileInfo\Translation',  pointer(TransBuffer), TransLen);
                      if TransLen >= 4 then
                      begin
                          temp:=0; // fix bug by syant 2019/04/04   win1064 or win7 sometimes get (400)0804 (400)03A8
                          StrLCopy(@temp, TransBuffer, 2);
                          CalcLangCharSet:=IntToHex(temp, 4);
                          temp:=0;  // fix bug by syant 2019/04/04   win1064 or win7 sometimes get (400)0804 (400)03A8
                          StrLCopy(@temp, TransBuffer+2, 2);
                          CalcLangCharSet := CalcLangCharSet+IntToHex(temp, 4);
                          FLangCharSet := CalcLangCharSet;  //the right data = 080403A8
                          //
                          if VerQueryValue(syant_buffer, pchar('\StringFileInfo\'+FLangCharSet+'\'+
                                   'FileVersion'),
                                   pointer(VersionPointer), vallen) then
                          begin
                              if (Vallen > 1) then
                              begin
                                  SetLength(current_version, vallen);
                                  StrLCopy(Pchar(current_version), VersionPointer, vallen);
                                  result:=trim(current_version);
                              end else
                              begin
                                result:='0.0.0.4';
                              end;
                          end else
                          begin
                              result:='0.0.0.5';
                          end;
                      end  else
                      begin
                          result:='0.0.0.6';
                      end;
                end;
            finally
                StrDispose(syant_buffer);
            end;
     end;
end;







欢迎光临 深圳全飞鸿 (http://www.nagomes.com/disc/) Powered by Discuz! X3.2