Конференция "WinAPI" » Как получить значение нестандартную shell информацию о exe'шнике?
 
  • Gbp (17.05.08 15:35) [0]
    Есть нестандартный параметр exe-файла CompiledScript. Как получать такие нестандартные параметры?
  • Сергей М. © (17.05.08 17:00) [1]
    Это не "параметр", это GetFileVersionInfo
  • Gbp (17.05.08 21:06) [2]
    Спасибо за информацию, но как мне получить нестандартный параметр CompiledScript? С помощью структур типа VarFileInfo получить такой параметр невозможно.
  • Gbp (18.05.08 12:44) [3]
    Параметр ComiledScript расположен на вкладке "Версия".
  • Renegat (18.05.08 12:57) [4]
    Прога, откуда получаем - твоя? Или нужно это выдернуть из чужой?
  • DVM © (18.05.08 14:49) [5]
    Какая разница своя/чужая. Для получения информации о версии и аналогичной прочей лабуды, которой может быть напихано в exe файл сколько угодно в виде параметр=значение служат следующие, как уже сказали. функции:

    GetFileVersionInfoSize
    GetFileVersionInfo
    VerQueryValue
  • Gbp (18.05.08 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 (18.05.08 15:14) [7]
    А FileInfo кто инициализировать будет?
  • Renegat (18.05.08 15:15) [8]
    Извиняюсь, не нужно его инициализировать :(
  • DVM © (18.05.08 17:34) [9]

    > Ну про функции эти я знаю.

    Не фига ты не знаешь, судя по [6]. Читай справку по ним.
  • Gbp (18.05.08 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 © (18.05.08 23:25) [11]

    > Gbp   (18.05.08 19:40) [10]
    > 2 DVM, офигенный совет, ради таких советов и стоит посещать
    > форумы.
    >
    > Ладно, вроде разобрался.

    Вот видишь. Сам. Это главное. Я ж вижу сам ты способен в работе функций разобраться, поэтому имен функций вполне достаточно для подсказки.

    Если же хочешь подробную подсказку - то посмотри один из модулей RXLib (не помню название) там есть класс-обертка для этих функций.
  • Германн © (19.05.08 01:18) [12]

    > Если же хочешь подробную подсказку - то посмотри один из
    > модулей RXLib (не помню название) там есть класс-обертка
    > для этих функций.
    >

    TVersionInfo из Rxverinf.pas
  • Gbp (19.05.08 14:08) [13]
    2DVM. Спасибо, не даете затупеть :)
    Всем спасибо за ответы, код работает, вопрос закрыт.
 
Конференция "WinAPI" » Как получить значение нестандартную shell информацию о exe'шнике?
Есть новые Нет новых   [134432   +20][b:0][p:0.001]