在delphi的Project/Options的Version info中有个可以输入的版本号,那么在代码中如何获取这个版本号,比如lbl1.caption := (版本号)
不知道如何实现?

解决方案 »

  1.   

    給你看段代碼吧,S是表示可執行名的路徑BufSize := GetFileVersionInfoSize(PChar(S), BufSize);
      if BufSize > 0 then
      begin
          Buf := AllocMem(BufSize);
          GetFileVersionInfo(PChar(S), 0, BufSize, Buf);
          if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[1]), Pointer(Value), Len) then
              ProductName.Caption := Value;
          if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[2]), Pointer(Value), Len) then
              ProductVersion.Caption := '产品版本ProductVersion: ' + Value;
          if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[3]), Pointer(Value), Len) then
              FileDescription.Caption := '文件说明FileDescription: ' + Value;
          if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[4]), Pointer(Value), Len) then
              LegalCopyright.Caption := '合法版权LegalCopyright: ' + Value;
          if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[5]), Pointer(Value), Len) then
              FileVersion.Caption := '文件版本FileVersion: ' + Value;
          if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[6]), Pointer(Value), Len) then
              CompanyName.Caption := '公司名称CompanyName: ' + Value;
          if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[7]), Pointer(Value), Len) then
              LegalTrades.Caption := '合法商标LegalTradeMarks: ' + Value;
          if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[8]), Pointer(Value), Len) then
              InternalName.Caption := '内部名称InternalName: ' + Value;
          if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[9]), Pointer(Value), Len) then
              OriginalFilename.Caption := '原文件名OriginalFileName: ' + Value;
          FreeMem(Buf, BufSize);      //OperatingSystem.Caption := GetOSVerInfo;
          //SystemMemory.Caption := GetMemStat; 
      end
      else
      begin
          Application.Terminate;
      end;
      

  2.   

    function GetVersion: string;inline;
    var
      VerInfoSize: DWORD;
      VerInfo: Pointer;
      VerValueSize: DWORD;
      VerValue: PVSFixedFileInfo;
      Dummy: DWORD;
    begin
      Result := '0.0.0.0';  VerInfoSize := GetFileVersionInfoSize(PChar(Application.ExeName), Dummy);
      if VerInfoSize = 0 then Exit;
      
      GetMem(VerInfo, VerInfoSize);
      GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
      VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
      with VerValue^ do
      begin
        dwProductVersionMS := dwFileVersionMS;
        dwProductVersionLS := dwFileVersionLS;
        Result :=Format('%d.%d.%d.%d', [
          dwProductVersionMS shr 16,
          dwProductVersionMS and $FFFF,
          dwProductVersionLS shr 16,
          dwProductVersionLS and $FFFF
          ]);
      end;
    end;
      

  3.   

    我结合1楼的080403A8在Delphi7下面的例子中找到办法了