Установить EXE VersionInfo - PullRequest
       27

Установить EXE VersionInfo

6 голосов
/ 17 октября 2011

Информация о версии Exe-файла я получаю с помощью VerQueryValue .Существует ли обратная функция (WinApi или Delphi), которая может регистрировать (устанавливать или изменять) такую ​​информацию?Здесь, например, есть программа, которая может это сделать.Как это может работать (http://www.angusj.com/resourcehacker)?

1 Ответ

12 голосов
/ 17 октября 2011

Информация о версии сохраняется через ресурсы; чтобы отредактировать это вам просто нужно отредактировать этот ресурс. Вот блок, который я нашел, который может клонировать информацию о версии существующего файла и прикрепить ее к другому файлу. Начиная с этого кода, очень легко делать то, что вы хотите (он написан моим другом и общедоступен):

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...