首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置EXE VersionInfo

设置EXE VersionInfo
EN

Stack Overflow用户
提问于 2011-10-17 23:49:16
回答 1查看 2.8K关注 0票数 6

我通过VerQueryValue收到的可执行文件版本的信息。是否有一个反函数(WinApi或Delphi)可以注册(建立或更改)这样的信息?例如,这里有一个程序可以做到这一点。它是如何工作的(http://www.angusj.com/resourcehacker)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-18 00:15:34

版本信息通过资源存储;要编辑该信息,只需编辑该资源即可。这是我发现的一个单元,可以克隆现有的文件版本信息并将其附加到另一个文件。从这段代码开始做你想做的事情非常容易(它是由我的一个朋友编写的,并且是公开提供的):

代码语言:javascript
复制
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), 0, 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.
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7796246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档