![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как из 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]Ее там нет. Если под этим не имеется в виду что-то другое.