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

Вниз

"Reading version information."   Найти похожие ветки 

 
Domkrat ©   (2004-04-29 13:21) [0]

Ув. мастера, подскажите почему не работает пример из "F1"-
"Reading version information."


 
Domkrat ©   (2004-04-29 13:23) [1]

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;


 
Гаврила ©   (2004-04-29 13:34) [2]

Скорее всего, не тот идентификатор языка


 
Юрий Зотов ©   (2004-04-29 13:39) [3]

Проверьте:
1. Не удалена ли случайно из DPR опция {$R *.RES}
2. Стоит ли птичка "Include version information into a project" на вкладке Version Info в диалоге Project Options (вызывается из меню Project - Options).


 
Domkrat ©   (2004-04-29 13:44) [4]

Точно, когда поставил Английский(США) вместо Русского-заработало.
Насколько я понял "StringFileInfo\040904E4\ - это и есть идентификатор языка, какой для русского языка 0419????  ?


 
Гаврила ©   (2004-04-29 13:46) [5]

>>Domkrat ©   (29.04.04 13:44) [4]
Его (идентификатор) по хорошему, надо сначала считать из этого же самого ресурса, а потом от него плясать


 
Domkrat ©   (2004-04-29 13:48) [6]

Спасибо Всем, дальше сам.


 
Domkrat ©   (2004-04-29 17:53) [7]

Если кому интересно вот что получилось...

function TfmMain.GetModuleVersion;
const
 InfoNum = 10;
 InfoStr: array[1..InfoNum] of string = ("CompanyName", "FileDescription", "FileVersion", "InternalName", "LegalCopyright", "LegalTradeMarks", "OriginalFileName", "ProductName", "ProductVersion", "Comments");
var
 s, FileName : string;
 n, i : DWORD;
 Buf : PChar;
 Value: PChar;
 FileInfo : PVSFixedFileInfo;
 trans:    pointer;
 temp, Major1, Minor1, Major2, Minor2 : integer;
 LangCharSet, LanguageInfo: string;
begin
 S := Application.ExeName;
 FileName := ExtractFileName(S);

 n := GetFileVersionInfoSize(PChar(S), n);
 Buf := AllocMem(n);
 GetFileVersionInfo(pchar(S),cardinal(0),n,Buf);
 //Определяем язык
 VerQueryValue(Buf,"\VarFileInfo\Translation",Trans, n);
 if n >= 4 then
 begin
   temp:=0;
     StrLCopy(@temp, pchar(Trans), 2);
     LangCharSet:=IntToHex(temp, 4);
     StrLCopy(@temp, pchar(Trans)+2, 2);
     LanguageInfo := LangCharSet+IntToHex(temp, 4);
 end else raise EReadError.Create("Invalid language info in file "+S);

 for i := 1 to InfoNum do
 begin
   //Для всех параметров
   VerQueryValue(Buf, PChar("\StringFileInfo\"+LanguageInfo+"\" + InfoStr[i]), Pointer(Value), n);
   Memo1.Lines.Add(InfoStr[i] + " = " + Value);
 end;

 //Для миноров мажоров

 VerQueryValue(Buf, "\", Pointer(FileInfo), n);
 Major1 := FileInfo.dwFileVersionMS shr 16;
 Major2 := FileInfo.dwFileVersionMS and $FFFF;
 Minor1 := FileInfo.dwFileVersionLS shr 16;
 Minor2 := FileInfo.dwFileVersionLS and $FFFF;

 FreeMem(Buf, n);
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.037 c
14-1083156610
Vvv
2004-04-28 16:50
2004.05.16
Приколы по сети


14-1083049988
JibSkeart
2004-04-27 11:13
2004.05.16
Генеалогическое дерево языков :)


1-1083300607
ZDDR
2004-04-30 08:50
2004.05.16
Images


3-1082609683
ksa3003
2004-04-22 08:54
2004.05.16
Чувствительность к регистру при select.


9-1067790741
Unknown user
2003-11-02 19:32
2004.05.16
Оцените возможности 3D OpenGL движка.