please,很急啊:(
解决方案 »
- Virtual Treeview 添加 checkbox ??用过的进来cc
- delphi中关于数据库的
- 散分!哪位兄弟知道广州从高电子开发有限公司的?
- 救命!求一个特殊的加密解密算法!!!!
- 熟悉李维的分布式多层应用系统篇的高手或者Socketconnect请进!
- 谁能帮我看看我的这个程序,我都要风了。
- jackie168(玉面書生) 先进来拿分!③
- 特急!关于Install Shield!!!
- 请问那里有关于VCL介绍就是属性介绍的书下
- 有点难,怎么判断网络上的文件是否存在?
- 用delphi 怎样在我写的程序安装的时候向系统注册(在桌面上,程序菜单中)我的程序的图表?
- dbgrid的所选行的指定列的值怎么表示?
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);
最重要的是想问, 我如何对执行文件的上述版本信息进行修改呢?有没有API可以做到,我查询了MSDN,好像没有发现这样的函数啊!