2011-10-17 11 views
6

VerQueryValueで受け取るバージョンのExeファイルの情報。このような情報を登録(設定または変更)できる逆関数(WinApiまたはDelphi)がありますか? ここでは、例えば、そうすることができるプログラムがあります。どのように動作するのですか(http://www.angusj.com/resourcehacker)?EXEのバージョン情報を設定する

+1

これは、[バージョンリソース](http://msdn.microsoftによって決定されます。 com/ja-jp/library/aa381058(VS.85).aspx)。 ['UpdateResource'](http://msdn.microsoft.com/en-us/library/ms648049(VS.85).aspx)を使用して変更してください。 –

+1

バージョン情報を設定するソースを持つプログラムへのリンクです。 Delphi 2009以降は互換性があります。 [更新されたsetversion-file-version-in-res-or-exe](http://www.jasontpenny.com/blog/2009/09/05/updated-setversion-exe-to-set- to-set-file-version-in-res-or-exe /) –

答えて

12

バージョン情報はリソースを介して保存されます。そのリソースを編集するだけで編集できるようになります。ここには、既存のファイルバージョン情報を複製して別のファイルに添付できるユニットがあります。それは(それが私の友人で符号化し、公共利用できるです)あなたはこのコードから始まるやりたいことは非常に簡単です:

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. 
+0

これは単なる言語とコードページの情報です。 [VS_FIXEDFILEINFO](http://msdn.microsoft.com/en-us/library/ms646997%28v=VS.85%29.aspx)はどうですか? +1とにかく – TLama

+0

ありがとう、今私は研究に従事する... –

+1

これはあなたがインターネットで見つけたユニットであれば、ライセンスにもっと注意する必要があります。少なくとも、ソースへのリンクを提供する必要があります。 (さらに、http://en.wikipedia.org/wiki/Run-on_sentenceを見てください) –

関連する問題