-
Есть нестандартный параметр exe-файла CompiledScript. Как получать такие нестандартные параметры?
-
Это не "параметр", это GetFileVersionInfo
-
Спасибо за информацию, но как мне получить нестандартный параметр CompiledScript? С помощью структур типа VarFileInfo получить такой параметр невозможно.
-
Параметр ComiledScript расположен на вкладке "Версия".
-
Прога, откуда получаем - твоя? Или нужно это выдернуть из чужой?
-
Какая разница своя/чужая. Для получения информации о версии и аналогичной прочей лабуды, которой может быть напихано в exe файл сколько угодно в виде параметр=значение служат следующие, как уже сказали. функции:
GetFileVersionInfoSize GetFileVersionInfo VerQueryValue
-
Ну про функции эти я знаю. В 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));
-
А FileInfo кто инициализировать будет?
-
Извиняюсь, не нужно его инициализировать :(
-
> Ну про функции эти я знаю.
Не фига ты не знаешь, судя по [6]. Читай справку по ним.
-
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));
-
> Gbp (18.05.08 19:40) [10] > 2 DVM, офигенный совет, ради таких советов и стоит посещать > форумы. > > Ладно, вроде разобрался.
Вот видишь. Сам. Это главное. Я ж вижу сам ты способен в работе функций разобраться, поэтому имен функций вполне достаточно для подсказки.
Если же хочешь подробную подсказку - то посмотри один из модулей RXLib (не помню название) там есть класс-обертка для этих функций.
-
> Если же хочешь подробную подсказку - то посмотри один из > модулей RXLib (не помню название) там есть класс-обертка > для этих функций. >
TVersionInfo из Rxverinf.pas
-
2DVM. Спасибо, не даете затупеть :) Всем спасибо за ответы, код работает, вопрос закрыт.
|