Форум: "WinAPI";
Текущий архив: 2009.06.14;
Скачать: [xml.tar.bz2];
ВнизКак получить значение нестандартную shell информацию о exe шнике? Найти похожие ветки
← →
Gbp (2008-05-17 15:35) [0]Есть нестандартный параметр exe-файла CompiledScript. Как получать такие нестандартные параметры?
← →
Сергей М. © (2008-05-17 17:00) [1]Это не "параметр", это GetFileVersionInfo
← →
Gbp (2008-05-17 21:06) [2]Спасибо за информацию, но как мне получить нестандартный параметр CompiledScript? С помощью структур типа VarFileInfo получить такой параметр невозможно.
← →
Gbp (2008-05-18 12:44) [3]Параметр ComiledScript расположен на вкладке "Версия".
← →
Renegat (2008-05-18 12:57) [4]Прога, откуда получаем - твоя? Или нужно это выдернуть из чужой?
← →
DVM © (2008-05-18 14:49) [5]Какая разница своя/чужая. Для получения информации о версии и аналогичной прочей лабуды, которой может быть напихано в exe файл сколько угодно в виде параметр=значение служат следующие, как уже сказали. функции:
GetFileVersionInfoSize
GetFileVersionInfo
VerQueryValue
← →
Gbp (2008-05-18 15:10) [6]Ну про функции эти я знаю. В VerQueryValue вторым параметром нужно передавать строку, в которой указан путь к нужной информации. Собственно вопрос, что нужно передавать в VerQueryValue, чтобы получить такое нестандартное значение.
var
Size: Cardinal;
FileHandle: THandle;
Data: Pointer;
FileInfo: Pointer;
InfoLength: Cardinal;
begin
Size := GetFileVersionInfoSize("С:\sample.exe", FileHandle);
Data := GetMemory(Size);
if not GetFileVersionInfo("С:\sample.exe", FileHandle, Size, Data) then
ShowMessage(IntToStr(GetLastError));
if not VerQueryValue(Data, "CompiledScript", FileInfo, InfoLength) then // не работает
ShowMessage(IntToStr(GetLastError));
← →
Renegat (2008-05-18 15:14) [7]А FileInfo кто инициализировать будет?
← →
Renegat (2008-05-18 15:15) [8]Извиняюсь, не нужно его инициализировать :(
← →
DVM © (2008-05-18 17:34) [9]
> Ну про функции эти я знаю.
Не фига ты не знаешь, судя по [6]. Читай справку по ним.
← →
Gbp (2008-05-18 19:40) [10]2 DVM, офигенный совет, ради таких советов и стоит посещать форумы.
Ладно, вроде разобрался.
type
LANGANDCODEPAGE = record
wLanguage: WORD;
wCodePage: WORD;
end;
var
Size: Cardinal;
FileHandle: THandle;
Data: Pointer;
LanguageCodePage: ^LANGANDCODEPAGE;
InfoLength: Cardinal;
FormatString: string;
Buffer: Pointer;
begin
Size := GetFileVersionInfoSize("С:\sample.exe", FileHandle);
Data := GetMemory(Size);
GetFileVersionInfo("C:\sample.exe", FileHandle, Size, Data);
VerQueryValue(Data, "\VarFileInfo\Translation", Pointer(LanguageCodePage), InfoLength);
FormatString := Format("\StringFileInfo\0%x0%x\CompiledScript", [LanguageCodePage.wLanguage, LanguageCodePage.wCodePage]);
VerQueryValue(Data, PChar(FormatString), Buffer, InfoLength);
ShowMessage(PChar(Buffer));
← →
DVM © (2008-05-18 23:25) [11]
> Gbp (18.05.08 19:40) [10]
> 2 DVM, офигенный совет, ради таких советов и стоит посещать
> форумы.
>
> Ладно, вроде разобрался.
Вот видишь. Сам. Это главное. Я ж вижу сам ты способен в работе функций разобраться, поэтому имен функций вполне достаточно для подсказки.
Если же хочешь подробную подсказку - то посмотри один из модулей RXLib (не помню название) там есть класс-обертка для этих функций.
← →
Германн © (2008-05-19 01:18) [12]
> Если же хочешь подробную подсказку - то посмотри один из
> модулей RXLib (не помню название) там есть класс-обертка
> для этих функций.
>
TVersionInfo из Rxverinf.pas
← →
Gbp (2008-05-19 14:08) [13]2DVM. Спасибо, не даете затупеть :)
Всем спасибо за ответы, код работает, вопрос закрыт.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.06.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c