有关我通过
VerQueryValue收到的版本Exe文件的信息.是否有可以注册(建立或更改)此类信息的反函数(WinApi或Delphi)?
这里,例如,有一个能够这样做的程序.它怎么可能有用( http://www.angusj.com/resourcehacker)?
这里,例如,有一个能够这样做的程序.它怎么可能有用( http://www.angusj.com/resourcehacker)?
版本信息通过资源存储;编辑您只需编辑该资源.这是我发现的一个单元,可以克隆现有的文件版本信息并将其附加到另一个文件.从这段代码开始,你可以很容易地做你想要的东西(它是由我的一个朋友编写的,可以公开获得):
unit cloneinfo; interface uses Windows,SysUtils; type LANGANDCODEPAGE = record wLanguage: Word; wCodePage: Word; end; procedure clone(sFile,output:string); implementation procedure clone(sFile,output:string); var dwHandle,cbTranslate: cardinal; sizeVers: DWord; lpData,langData: Pointer; lpTranslate: ^LANGANDCODEPAGE; hRes : THandle; begin sizeVers := GetFileVersionInfoSize(PChar(sFile),dwHandle); If sizeVers = 0 then exit; GetMem(lpData,sizeVers); try ZeroMemory(lpData,sizeVers); GetFileVersionInfo (PChar(sFile),sizeVers,lpData); If not VerQueryValue (lpData,'\VarFileInfo\Translation',langData,cbTranslate) then exit; hRes := BeginUpdateResource(pchar(output),FALSE); //For i := 0 to (cbTranslate div sizeof(LANGANDCODEPAGE)) do //begin lpTranslate := Pointer(Integer(langData) + sizeof(LANGANDCODEPAGE)); UpdateResource(hRes,RT_VERSION,MAKEINTRESOURCE(VS_VERSION_INFO),lpTranslate^.wLanguage,lpData,sizeVers); //end; EndUpdateResource(hRes,FALSE); finally FreeMem(lpData); end; end; end.