Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.05;
Скачать: CL | DM;

Вниз

Извлечении такстовой версии из файла   Найти похожие ветки 

 
Woolen ©   (2002-10-24 12:42) [0]

Здравствуйте, помогите, пожалуйста извлечь версию из файла. Не могу разобраться. Нужно получить версию продукта в текстовом виде. Я знаю, что она там есть. Однако в WinAPI, по крайней мере в документации, которая поставляется с Delphi, этого нет. Есть только числовой вариант в структуре VS_FIXEDFILEINFO. Его извлечь, видимо, можно. А где текстовый, который записывается в полях Delphi в опциях проекта? Напишите там любую комбинацию цифр и точек с любым количеством нулей и Delphi все передаст в тексте до последнего нолика. А вот как достать? Помогите все, кто знает.


 
Игорь Шевченко ©   (2002-10-24 12:50) [1]

procedure TfrmMain.GetVersionAttributes(Name: String; var ACompany,
ADescription, AComment: String);

var VerInfoSize : DWord;
dummy : DWord;
VerInfo : Pointer;
VSFixed : PVSFixedFileInfo;
VSFixedSize : DWORD;
VTranslation : PVerLang;
VTRSize : DWORD;
LangID : String;
VerKey : String;
VerDesc : PChar;
VerDescSize : DWORD;
VerCompany : PChar;
VerCompanySize : DWORD;
VerComment : PChar;
VerCommentSize : DWORD;
Status : LongBool;
begin
ACompany := "<Not available>";
ADescription := "<Not available>";
AComment := "";
VerInfoSize := GetFileVersionInfoSize(PChar(Name), dummy);
if (VerInfoSize = 0) then
Exit;
GetMem( VerInfo, VerInfoSize );
try
Status := GetFileVersionInfo(PChar(Name), 0, VerInfoSize, VerInfo);
if NOT Status then
Exit;
VerQueryValue( VerInfo, "\", Pointer(VSFixed), VSFixedSize);
VerQueryValue( VerInfo, "\VarFileInfo\Translation", Pointer(VTranslation), VTRSize);
if (VTRSize = 4) then begin
LangID := Format("%.4x%.4x", [VTranslation^.CharSet, VTranslation^.LangID]);
VerKey := "\StringFileInfo\"+LangID+"\FileDescription";
Status := VerQueryValue (VerInfo,PChar(VerKey), Pointer(VerDesc), VerDescSize);
if (Status) AND (VerDescSize <> 0) then
ADescription := VerDesc;
VerKey := "\StringFileInfo\"+LangID+"\CompanyName";
Status := VerQueryValue (VerInfo,PChar(VerKey), Pointer(VerCompany), VerCompanySize);
if (Status) AND (VerCompanySize <> 0) then
ACompany := VerCompany;
VerKey := "\StringFileInfo\"+LangID+"\Comments";
Status := VerQueryValue (VerInfo,PChar(VerKey), Pointer(VerComment), VerCommentSize);
if (Status) AND (VerCommentSize <> 0) then
AComment := VerComment;
end;
finally
FreeMem(VerInfo, VerInfoSize);
end;
end;



Как пример...


 
Woolen ©   (2002-10-24 14:56) [2]

Спасибо, надеюсь, что это мне поможет.


 
Woolen ©   (2002-10-24 16:03) [3]

Никак не могу понять, что за тип такой PVerLang и как он устроен. Я так понял, это указатель на структуру. А на какую?


 
Игорь Шевченко ©   (2002-10-24 17:37) [4]

Прошу прощения, забыл:

type
PVerLang = ^TVerLang;
TVerLang = packed record
Charset : Word;
LangID : Word;
end;

С уважением,


 
Woolen ©   (2002-10-24 18:19) [5]

Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2002.12.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
7-14828
_kir_
2002-10-03 14:37
2002.12.05
доступ к папкам в


7-14825
LuckyR
2002-10-01 13:28
2002.12.05
Работа с модемом


3-14387
Alexandr_kr
2002-11-15 13:29
2002.12.05
Microsoft SQL Server


14-14747
Дурак
2002-11-12 22:34
2002.12.05
Как мне быть???


1-14586
Андрей Сенченко
2002-11-27 13:08
2002.12.05
Аттрибуты функции FindFirst - не могу понять