Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как из exe фаила вытащить мета инфо


dracula ©   (2004-08-03 18:16:00) 

как из exe фаила вытащить мета инфо - если она там есть.


Sergey Kaminski   (2004-08-03 23:06:00) [1]

Я так и знал =))


dracula   (2004-08-03 22:55:00) [2]

Спасибо то что нужно =)


Sergey Kaminski   (2004-08-03 19:57:00) [3]

Как понятно из кода, читает FileDescription из exe.
Можно сделать покрасивее, определив заранее "нормальные" типы данных.


Sergey Kaminski   (2004-08-03 19:55:00) [4]

Обещанный код. Немного грязноват, но написан на колене.

type
 TFileDescr = array [0..255] of Char;
 PFileDescr = ^TFileDescr;
var
 InfoSize: DWORD;
 Dummy: Cardinal;
 FileName: string;
 Buff,LangBuff: PChar;
 PInfo: PFileDescr;
 InfoLen,LangLen: Cardinal;
 LangLocale: string;
begin
 FileName := 'C:\Program Files\Windows Media Player\wmplayer.exe';

 // определяем размер структуры
 InfoSize := GetFileVersionInfoSize(
   PChar(FileName),
   Dummy
 );

 if InfoSize <> 0 then
 begin
   // выделяем память для структуры
   GetMem (Buff,InfoSize);

   // читаем весь ресурс в память
   GetFileVersionInfo(
     PChar(FileName),
     0,
     InfoSize,
     Buff
   );

   // определяем локаль строковых значений ресурса
   VerQueryValue(Buff, '\VarFileInfo\Translation', pointer(LangBuff), LangLen);
   if langLen >= 4 then
   begin
     {
      чтобы сделать более наглядно,
      можно создать record для LangBuff,
      но можно и так :)
     }
     StrLCopy(@Dummy, LangBuff, 2);
     LangLocale:= Format('%4.4x', [Dummy]);
     StrLCopy(@Dummy, LangBuff+2, 2);
     LangLocale := LangLocale + Format('%4.4x', [Dummy]);
     // Format используем для преобразования к 16-ричному виду,
     // по 4 цифры на число
   end
   else
     // если локаль не прописана явно, берем Амер. Англ., ANSI
     LangLocale := '040904E4';

   // читаем строку FileDescription из ресурса
   // для списка всех допустимых строк см. VerQueryValue  
   // в MSDN
   // напр: CompanyName FileDescription FileVersion
   // InternalName LegalCopyright OriginalFilename ProductName  
   // ProductVersion

   if VerQueryValue(
     Buff,
     PChar('\StringFileInfo\' + LangLocale + '\FileDescription'),
     Pointer(PInfo),
     InfoLen
   ) then
   begin
     ShowMessage (PInfo^);// да будет нам счастье! :)
   end;
   // освобождаем буфер ресурса
   FreeMem (Buff,InfoSize);
 end;

end;


Sergey Kaminski   (2004-08-03 18:49:00) [5]

Сейчас напишу пример, вышлю.


dracula   (2004-08-03 18:49:00) [6]

Я бы хотел надеяться что поможет =). тока незнаю как 8)


Sergey Kaminski   (2004-08-03 18:48:00) [7]

И функция VerQueryValue да поможет тебе! :-)


dracula   (2004-08-03 18:47:00) [8]

я бы посмотрел, а это где? (глупый вопрос, но я незнаю на него ответ). А так на примере показать никак?


Sergey Kaminski   (2004-08-03 18:43:00) [9]

См. описание ресурса VERSIONINFO в Win32.hlp :)


dracula   (2004-08-03 18:41:00) [10]

да если мы об одном говорим то Versioninfo.


dracula   (2004-08-03 18:39:00) [11]

а как вытащить?


Sergey Kaminski   (2004-08-03 18:39:00) [12]

может быть имеется в виду VersionInfo?


dracula   (2004-08-03 18:37:00) [13]

Она там есть, потомучто под этим имеется в виду что-то другое.
Как в тотал командере - когда на exe файл наводишь мышку - вылазит окошко с метаинфой, может она и подругому называеться, но надо вот это =)


Sergey Kaminski   (2004-08-03 18:37:00) [14]

Anatoly Podgoretsky ©   (03.08.04 18:36) [2]

Воспользуюсь советом.


Anatoly Podgoretsky   (2004-08-03 18:36:00) [15]

Она там есть, сиотри форматы исполнимых файлов


Sergey Kaminski   (2004-08-03 18:19:00) [16]

Ее там нет. Если под этим не имеется в виду что-то другое.


Наверх

Титульная страница Поиск, карта сайта Написать письмо