怎么取程序的版本号!比如说我的程序目前编译的版本号为1.0.1.1,怎样将它取出! 怎么取程序的版本号!比如说我的程序目前编译的版本号为1.0.1.1,怎样将它取出! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 定一个版本信息结构: typePFixedFileInfo = ^TFixedFileInfo;TFixedFileInfo = recorddwSignature : DWORD;dwStrucVersion : DWORD;wFileVersionMS : WORD; // 次版本号wFileVersionLS : WORD; // 主版本号wProductVersionMS : WORD; // 建立次数(build)wProductVersionLS : WORD; // 发行次数(release)dwFileFlagsMask : DWORD;dwFileFlags : DWORD;dwFileOS : DWORD;dwFileType : DWORD;dwFileSubtype : DWORD;dwFileDateMS : DWORD;dwFileDateLS : DWORD;end; // TFixedFileInfo 下面是取版本信息函数function FileInfo( const FileName :String ) : TFixedFileInfo;vardwHandle, dwVersionSize : DWORD;strSubBlock : String;pTemp : Pointer;pData : Pointer;beginstrSubBlock := ';// 取得文件版本信息的大小dwVersionSize := GetFileVersionInfoSize( PChar( FileName ), dwHandle ); if dwVersionSize <> 0 thenbeginGetMem( pTemp, dwVersionSize );try//取文件版本信息if GetFileVersionInfo( PChar( FileName ),dwHandle,dwVersionSize,pTemp ) then//查询文件版本信息if VerQueryValue( pTemp,PChar( strSubBlock ),pData,dwVersionSize ) thenResult := PFixedFileInfo( pData )^;finallyFreeMem( pTemp );end; // tryend; // if dwVersionSizeend;调用例子:varf1:string;x :TFixedFileInfo;beginf1 := Application.ExeName;x := FileInfo( f1 );ShowMessage( f1 +#13#10'Version: ' + IntToStr( x.wFileVersionLS ) + '.' +IntToStr( x.wFileVersionMS ) +#13#10'Release: ' + IntToStr( x.wProductVersionLS) +#13#10'Build: ' + IntToStr( x.wProductVersionMS ) );end;**********************************获取文件版本信息typeTFileInfo = packed recordCommpanyName: string;FileDescription: string;FileVersion: string;InternalName: string;LegalCopyright: string;LegalTrades: string;OriginalFileName: string;ProductName: string;ProductVersion: string;Comments: string;VsFixedFileInfo:VS_FIXEDFILEINFO;UserDefineValue:string;end;function GetFileVersionInfomation(const FileName: string; var info: TFileInfo;UserDefine:string=''):boolean;constSFInfo= ';varVersionInfo: Pointer;InfoSize: DWORD;InfoPointer: Pointer;Translation: Pointer;VersionValue: string;unused: DWORD;beginunused := 0;Result := False;InfoSize := GetFileVersionInfoSize(pchar(FileName), unused);if InfoSize > 0 thenbeginGetMem(VersionInfo, InfoSize);Result := GetFileVersionInfo(pchar(FileName), 0, InfoSize, VersionInfo);if Result thenbeginVerQueryValue(VersionInfo, '', Translation, InfoSize);VersionValue := SFInfo + IntToHex(LoWord(Longint(Translation^)), 4) +IntToHex(HiWord(Longint(Translation^)), 4) + ';VerQueryValue(VersionInfo, pchar(VersionValue + 'CompanyName'), InfoPointer, InfoSize);info.CommpanyName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'FileDescription'), InfoPointer, InfoSize);info.FileDescription := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'FileVersion'), InfoPointer, InfoSize);info.FileVersion := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'InternalName'), InfoPointer, InfoSize);info.InternalName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalCopyright'), InfoPointer, InfoSize);info.LegalCopyright := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalTrades'), InfoPointer, InfoSize);info.LegalTrades := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'OriginalFileName'), InfoPointer, InfoSize);info.OriginalFileName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductName'), InfoPointer, InfoSize);info.ProductName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductVersion'), InfoPointer, InfoSize);info.ProductVersion := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'Comments'), InfoPointer, InfoSize);info.Comments := string(pchar(InfoPointer));if VerQueryValue(VersionInfo, ', InfoPointer, InfoSize) theninfo.VsFixedFileInfo := TVSFixedFileInfo(InfoPointer^);if UserDefine<>'' thenbeginif VerQueryValue(VersionInfo,pchar(VersionValue+UserDefine),InfoPointer,InfoSize) theninfo.UserDefineValue:=string(pchar(InfoPointer));end;end;FreeMem(VersionInfo);end;end;调用演示:procedure TForm1.Button1Click(Sender: TObject);varinfo: TFileInfo;beginif OpenDialog1.Execute thenbeginif GetFileVersionInfomation(opendialog1.FileName, info,'WOW Version') thenbeginListbox1.Items.Add(OpenDialog1.FileName);ListBox1.Items.Add('Comments:' + info.Comments);ListBox1.Items.Add('CommpanyName:' + info.CommpanyName);ListBox1.Items.Add('FileDescription:' + info.FileDescription);ListBox1.Items.Add('FileVersion:' + info.FileVersion);ListBox1.Items.Add('InternalName:' + info.InternalName);ListBox1.Items.Add('LegalCopyright:' + info.LegalCopyright);ListBox1.Items.Add('LegalTrades:' + info.LegalTrades);ListBox1.Items.Add('OriginalFileName:' + info.OriginalFileName);ListBox1.Items.Add('ProductName:' + info.ProductName);ListBox1.Items.Add('ProductVersion:' + info.ProductVersion);ListBox1.Items.Add('UserDefineValue:' + info.UserDefineValue);if boolean(info.VsFixedFileInfo.dwFileFlags and vs_FF_Debug) thenlistbox1.Items.Add('Debug:True')elseListBox1.Items.Add('Debug:False');ListBox1.Items.Add('');end;end;end; //我来贴一个自己写的~~type TFileVersionInfomation = record rCommpanyName: string; rFileDescription: string; rFileVersion: string; rInternalName: string; rLegalCopyright: string; rLegalTrades: string; rOriginalFileName: string; rProductName: string; rProductVersion: string; rComments: string; rVsFixedFileInfo: VS_FIXEDFILEINFO; rDefineValue: string; end;function GetFileVersionInfomation(mFileName: TFileName; var nFileVersionInfomation: TFileVersionInfomation; mDefineName: string = ''): Boolean;var vHandle: Cardinal; vInfoSize: Cardinal; vVersionInfo: Pointer; vTranslation: Pointer; vVersionValue: string; vInfoPointer: Pointer;begin Result := False; vInfoSize := GetFileVersionInfoSize(PChar(mFileName), vHandle); //取得文件版本信息空间及资源句柄 FillChar(nFileVersionInfomation, SizeOf(nFileVersionInfomation), 0); //初始化返回信息 if vInfoSize <= 0 then Exit; //安全检查 GetMem(vVersionInfo, vInfoSize); //分配资源 with nFileVersionInfomation do try if not GetFileVersionInfo(PChar(mFileName), vHandle, vInfoSize, vVersionInfo) then Exit; VerQueryValue(vVersionInfo, '\VarFileInfo\Translation', vTranslation, vInfoSize); vVersionValue := Format('\StringFileInfo\%.4x%.4x\', [LOWORD(Longint(vTranslation^)), HIWORD(Longint(vTranslation^))]); VerQueryValue(vVersionInfo, PChar(vVersionValue + 'CompanyName'), vInfoPointer, vInfoSize); rCommpanyName := PChar(vInfoPointer); VerQueryValue(vVersionInfo, PChar(vVersionValue + 'FileDescription'), vInfoPointer, vInfoSize); rFileDescription := PChar(vInfoPointer); VerQueryValue(vVersionInfo, PChar(vVersionValue + 'FileVersion'), vInfoPointer, vInfoSize); rFileVersion := PChar(vInfoPointer); VerQueryValue(vVersionInfo, PChar(vVersionValue + 'InternalName'), vInfoPointer, vInfoSize); rInternalName := PChar(vInfoPointer); VerQueryValue(vVersionInfo, PChar(vVersionValue + 'LegalCopyright'), vInfoPointer, vInfoSize); rLegalCopyright := PChar(vInfoPointer); VerQueryValue(vVersionInfo, PChar(vVersionValue + 'LegalTrades'), vInfoPointer, vInfoSize); rLegalTrades := PChar(vInfoPointer); VerQueryValue(vVersionInfo, PChar(vVersionValue + 'OriginalFileName'), vInfoPointer, vInfoSize); rOriginalFileName := PChar(vInfoPointer); VerQueryValue(vVersionInfo, PChar(vVersionValue + 'ProductName'), vInfoPointer, vInfoSize); rProductName := PChar(vInfoPointer); VerQueryValue(vVersionInfo, PChar(vVersionValue + 'ProductVersion'), vInfoPointer, vInfoSize); rProductVersion := PChar(vInfoPointer); VerQueryValue(vVersionInfo, PChar(vVersionValue + 'Comments'), vInfoPointer, vInfoSize); rComments := PChar(vInfoPointer); VerQueryValue(vVersionInfo, '\', vInfoPointer, vInfoSize); rVsFixedFileInfo := TVSFixedFileInfo(vInfoPointer^); if mDefineName <> '' then begin VerQueryValue(vVersionInfo, PChar(vVersionValue + mDefineName), vInfoPointer, vInfoSize); rDefineValue := PChar(vInfoPointer); end else rDefineValue := ''; finally FreeMem(vVersionInfo, vInfoSize); end; Result := True;end; { GetFileVersionInfomation } 图片圆角是如何实现?请教高手! 如何设置RichText中内容的行间距?? QREPORT 中的QRMemo1自动换行???? 在delphi中定义一个类时,如何声明一个类变量成员?在线等待。。。。 求助!DIALOG的问题! 高兴,终于有个散分的理由了… 讨论 TREEVIEW的问题 各位老大。。。邦邦忙呀。。。要不就死了。。。 如果调用formclose? 给分25,老板让我做现在工程的帮助文件,CHM格式的,还有文档,从来没做过,怎么办,快来帮哥们一把 应用程序检测自己的版本信息为何不正确 新西兰大学计算机专业的考试题,你会吗?请提供答案。
typePFixedFileInfo = ^TFixedFileInfo;TFixedFileInfo = recorddwSignature : DWORD;dwStrucVersion : DWORD;wFileVersionMS : WORD; // 次版本号wFileVersionLS : WORD; // 主版本号wProductVersionMS : WORD; // 建立次数(build)wProductVersionLS : WORD; // 发行次数(release)dwFileFlagsMask : DWORD;dwFileFlags : DWORD;dwFileOS : DWORD;dwFileType : DWORD;dwFileSubtype : DWORD;dwFileDateMS : DWORD;dwFileDateLS : DWORD;end; // TFixedFileInfo 下面是取版本信息函数function FileInfo( const FileName :String ) : TFixedFileInfo;vardwHandle, dwVersionSize : DWORD;strSubBlock : String;pTemp : Pointer;pData : Pointer;beginstrSubBlock := ';// 取得文件版本信息的大小dwVersionSize := GetFileVersionInfoSize( PChar( FileName ), dwHandle ); if dwVersionSize <> 0 thenbeginGetMem( pTemp, dwVersionSize );try//取文件版本信息if GetFileVersionInfo( PChar( FileName ),dwHandle,dwVersionSize,pTemp ) then//查询文件版本信息if VerQueryValue( pTemp,PChar( strSubBlock ),pData,dwVersionSize ) thenResult := PFixedFileInfo( pData )^;finallyFreeMem( pTemp );end; // tryend; // if dwVersionSizeend;调用例子:varf1:string;x :TFixedFileInfo;beginf1 := Application.ExeName;x := FileInfo( f1 );ShowMessage( f1 +#13#10'Version: ' + IntToStr( x.wFileVersionLS ) + '.' +IntToStr( x.wFileVersionMS ) +#13#10'Release: ' + IntToStr( x.wProductVersionLS) +#13#10'Build: ' + IntToStr( x.wProductVersionMS ) );end;**********************************获取文件版本信息typeTFileInfo = packed recordCommpanyName: string;FileDescription: string;FileVersion: string;InternalName: string;LegalCopyright: string;LegalTrades: string;OriginalFileName: string;ProductName: string;ProductVersion: string;Comments: string;VsFixedFileInfo:VS_FIXEDFILEINFO;UserDefineValue:string;end;function GetFileVersionInfomation(const FileName: string; var info: TFileInfo;UserDefine:string=''):boolean;constSFInfo= ';varVersionInfo: Pointer;InfoSize: DWORD;InfoPointer: Pointer;Translation: Pointer;VersionValue: string;unused: DWORD;beginunused := 0;Result := False;InfoSize := GetFileVersionInfoSize(pchar(FileName), unused);if InfoSize > 0 thenbeginGetMem(VersionInfo, InfoSize);Result := GetFileVersionInfo(pchar(FileName), 0, InfoSize, VersionInfo);if Result thenbeginVerQueryValue(VersionInfo, '', Translation, InfoSize);VersionValue := SFInfo + IntToHex(LoWord(Longint(Translation^)), 4) +IntToHex(HiWord(Longint(Translation^)), 4) + ';VerQueryValue(VersionInfo, pchar(VersionValue + 'CompanyName'), InfoPointer, InfoSize);info.CommpanyName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'FileDescription'), InfoPointer, InfoSize);info.FileDescription := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'FileVersion'), InfoPointer, InfoSize);info.FileVersion := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'InternalName'), InfoPointer, InfoSize);info.InternalName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalCopyright'), InfoPointer, InfoSize);info.LegalCopyright := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'LegalTrades'), InfoPointer, InfoSize);info.LegalTrades := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'OriginalFileName'), InfoPointer, InfoSize);info.OriginalFileName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductName'), InfoPointer, InfoSize);info.ProductName := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'ProductVersion'), InfoPointer, InfoSize);info.ProductVersion := string(pchar(InfoPointer));VerQueryValue(VersionInfo, pchar(VersionValue + 'Comments'), InfoPointer, InfoSize);info.Comments := string(pchar(InfoPointer));if VerQueryValue(VersionInfo, ', InfoPointer, InfoSize) theninfo.VsFixedFileInfo := TVSFixedFileInfo(InfoPointer^);if UserDefine<>'' thenbeginif VerQueryValue(VersionInfo,pchar(VersionValue+UserDefine),InfoPointer,InfoSize) theninfo.UserDefineValue:=string(pchar(InfoPointer));end;end;FreeMem(VersionInfo);end;end;调用演示:procedure TForm1.Button1Click(Sender: TObject);varinfo: TFileInfo;beginif OpenDialog1.Execute thenbeginif GetFileVersionInfomation(opendialog1.FileName, info,'WOW Version') thenbeginListbox1.Items.Add(OpenDialog1.FileName);ListBox1.Items.Add('Comments:' + info.Comments);ListBox1.Items.Add('CommpanyName:' + info.CommpanyName);ListBox1.Items.Add('FileDescription:' + info.FileDescription);ListBox1.Items.Add('FileVersion:' + info.FileVersion);ListBox1.Items.Add('InternalName:' + info.InternalName);ListBox1.Items.Add('LegalCopyright:' + info.LegalCopyright);ListBox1.Items.Add('LegalTrades:' + info.LegalTrades);ListBox1.Items.Add('OriginalFileName:' + info.OriginalFileName);ListBox1.Items.Add('ProductName:' + info.ProductName);ListBox1.Items.Add('ProductVersion:' + info.ProductVersion);ListBox1.Items.Add('UserDefineValue:' + info.UserDefineValue);if boolean(info.VsFixedFileInfo.dwFileFlags and vs_FF_Debug) thenlistbox1.Items.Add('Debug:True')elseListBox1.Items.Add('Debug:False');ListBox1.Items.Add('');end;end;end;
type
TFileVersionInfomation = record
rCommpanyName: string;
rFileDescription: string;
rFileVersion: string;
rInternalName: string;
rLegalCopyright: string;
rLegalTrades: string;
rOriginalFileName: string;
rProductName: string;
rProductVersion: string;
rComments: string;
rVsFixedFileInfo: VS_FIXEDFILEINFO;
rDefineValue: string;
end;function GetFileVersionInfomation(mFileName: TFileName;
var nFileVersionInfomation: TFileVersionInfomation;
mDefineName: string = ''): Boolean;
var
vHandle: Cardinal;
vInfoSize: Cardinal;
vVersionInfo: Pointer;
vTranslation: Pointer;
vVersionValue: string;
vInfoPointer: Pointer;
begin
Result := False;
vInfoSize := GetFileVersionInfoSize(PChar(mFileName), vHandle); //取得文件版本信息空间及资源句柄
FillChar(nFileVersionInfomation, SizeOf(nFileVersionInfomation), 0); //初始化返回信息
if vInfoSize <= 0 then Exit; //安全检查 GetMem(vVersionInfo, vInfoSize); //分配资源
with nFileVersionInfomation do try
if not GetFileVersionInfo(PChar(mFileName),
vHandle, vInfoSize, vVersionInfo) then Exit;
VerQueryValue(vVersionInfo, '\VarFileInfo\Translation',
vTranslation, vInfoSize);
vVersionValue := Format('\StringFileInfo\%.4x%.4x\',
[LOWORD(Longint(vTranslation^)), HIWORD(Longint(vTranslation^))]);
VerQueryValue(vVersionInfo, PChar(vVersionValue + 'CompanyName'),
vInfoPointer, vInfoSize);
rCommpanyName := PChar(vInfoPointer);
VerQueryValue(vVersionInfo, PChar(vVersionValue + 'FileDescription'),
vInfoPointer, vInfoSize);
rFileDescription := PChar(vInfoPointer);
VerQueryValue(vVersionInfo, PChar(vVersionValue + 'FileVersion'),
vInfoPointer, vInfoSize);
rFileVersion := PChar(vInfoPointer);
VerQueryValue(vVersionInfo, PChar(vVersionValue + 'InternalName'),
vInfoPointer, vInfoSize);
rInternalName := PChar(vInfoPointer);
VerQueryValue(vVersionInfo, PChar(vVersionValue + 'LegalCopyright'),
vInfoPointer, vInfoSize);
rLegalCopyright := PChar(vInfoPointer);
VerQueryValue(vVersionInfo, PChar(vVersionValue + 'LegalTrades'),
vInfoPointer, vInfoSize);
rLegalTrades := PChar(vInfoPointer);
VerQueryValue(vVersionInfo, PChar(vVersionValue + 'OriginalFileName'),
vInfoPointer, vInfoSize);
rOriginalFileName := PChar(vInfoPointer);
VerQueryValue(vVersionInfo, PChar(vVersionValue + 'ProductName'),
vInfoPointer, vInfoSize);
rProductName := PChar(vInfoPointer);
VerQueryValue(vVersionInfo, PChar(vVersionValue + 'ProductVersion'),
vInfoPointer, vInfoSize);
rProductVersion := PChar(vInfoPointer);
VerQueryValue(vVersionInfo, PChar(vVersionValue + 'Comments'),
vInfoPointer, vInfoSize);
rComments := PChar(vInfoPointer);
VerQueryValue(vVersionInfo, '\', vInfoPointer, vInfoSize);
rVsFixedFileInfo := TVSFixedFileInfo(vInfoPointer^);
if mDefineName <> '' then begin
VerQueryValue(vVersionInfo, PChar(vVersionValue + mDefineName),
vInfoPointer, vInfoSize);
rDefineValue := PChar(vInfoPointer);
end else rDefineValue := '';
finally
FreeMem(vVersionInfo, vInfoSize);
end;
Result := True;
end; { GetFileVersionInfomation }