深圳全飞鸿

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 714|回复: 0
打印 上一主题 下一主题

delphi获取程序版本的实现标准getVersion

[复制链接]

104

主题

171

帖子

1179

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1179
跳转到指定楼层
楼主
发表于 2019-6-25 22:36:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先在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;


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|nagomes  

GMT+8, 2025-5-5 06:26 , Processed in 0.029559 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表