![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как работать с VersionInfo?
lucky4me © (2004-02-17 08:46:00)Пример из help'а Delphi6 не работает. что здесь не так?
procedure TForm1.Button1Click(Sender: TObject);
const
InfoNum = 10;
InfoStr: array[1..InfoNum] of string = ('CompanyName', 'FileDescription', 'FileVersion', 'InternalName', 'LegalCopyright', 'LegalTradeMarks', 'OriginalFileName', 'ProductName', 'ProductVersion', 'Comments');
var
S: string;
n, Len, i: DWORD;
Buf: PChar;
Value: PChar;
begin
S := Application.ExeName;
n := GetFileVersionInfoSize(PChar(S), n);
if n > 0 then
begin
Buf := AllocMem(n);
Memo1.Lines.Add('VersionInfoSize = ' + IntToStr(n));
GetFileVersionInfo(PChar(S), 0, n, Buf);
for i := 1 to InfoNum do
if VerQueryValue(Buf, PChar('StringFileInfo\040904E4\' + InfoStr[i]), Pointer(Value), Len) then
Memo1.Lines.Add(InfoStr[i] + ' = ' + Value);
FreeMem(Buf, n);
end
else
Memo1.Lines.Add('No version information found');
end;
lucky4me (2004-02-17 09:36:00) [1]премного благодарствую
Dimka Maslov (2004-02-17 09:23:00) [2]Язык не обязательно должен быть U.S. English (040904e4) но и Русский (041904e3), что устанавливается Delphi. Чтобы получить инофрмацию не зависимо от языка:
function GetStringFileInfo(const FileName: string; const Key: string): string;
var
Translation: PLongInt;
W: PWord absolute Translation;
Buffer, Value: Pointer;
Size, Len, Handle: DWORD;
SFI, Lang: string;
P: PChar;
begin
P:=PChar(FileName);
Size:=GetFileVersionInfoSize(P, Handle);
if Size<>0 then begin
GetMem(Buffer, Size);
try
GetFileVersionInfo(P, Handle, Size, Buffer);
VerQueryValue(Buffer, '\VarFileInfo\Translation', Pointer(Translation), Len);
Lang := IntToHex(Translation^ and $FFFF, 4) + IntToHex(Translation^ shr 16, 4);
SFI:=Format('\StringFileInfo\%s\%s', [Lang, Key]);
VerQueryValue(Buffer, PChar(SFI), Value, Len);
Result:=PChar(Value);
finally
FreeMem(Buffer, Size);
end;
end else Result:='';
end;