1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Получение версии приложения

Тема в разделе "Delphi - программирование", создана пользователем Jeefo, 13 сен 2008.

  1. Jeefo

    Jeefo Гость

    Репутация:
    0
    Добрый вечер.
    Понадобилось определить версию exe-приложения. Поиски в инете направили в сторону функций GetFileVersionInfoSize, GetFileVersionInfo и VerQueryValue. С первыми двумя нормально разобрался, а вот с последней возникла проблема: во втором параметре ей нужно передать язык и кодовую страницу. В дельфях в качестве примера предлагают '040904E4', однако с русским языком оно не работает. Нашел подходящее значение для русского языка - '041904E3', но в этом случае получается что я жестко задаю язык, и с другими языками у моей программы возникнут проблемы. Вопрос же состоит в следующем: можно ли программно определить требуемый для конкретного приложения язык и использовать в функции именно его? Как?
     
  2. zubr

    zubr Гость

    Репутация:
    0
    Искать надо сначала в MSDN. Там в описании функции VerQueryValue есть и пример, в котором перечисляются языки из блока полученного функцией GetFileVersionInfo.
     
  3. Jeefo

    Jeefo Гость

    Репутация:
    0
    zubr
    А не могли бы вы привести мне подобный пример, но на Delphi? Пример на мсдн просмотрел, с получением списка языков вроде разобрался, но вот что там происходит дальше, в цикле, для меня загадка.
     
  4. zubr

    zubr Гость

    Репутация:
    0
    Код:
    type
    LANGANDCODEPAGE = record
    wLanguage: Word;
    wCodePage: Word;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
    dwHandle, cbTranslate, lenBuf: cardinal;
    sizeVers: DWord;
    lpData, langData: Pointer;
    lpTranslate: ^LANGANDCODEPAGE;
    i: Integer;
    s: string;
    buf:PChar;
    begin
    sizeVers := GetFileVersionInfoSize('MyProgram.exe', dwHandle);
    If sizeVers = 0 then
    exit;
    GetMem(lpData, sizeVers);
    try
    ZeroMemory(lpData, sizeVers);
    GetFileVersionInfo ('MyProgram.exe', 0, sizeVers, lpData);
    If not VerQueryValue (lpData, '\VarFileInfo\Translation', langData, cbTranslate) then
    exit;
    For i := 0 to (cbTranslate div sizeof(LANGANDCODEPAGE)) do
    begin
    lpTranslate := Pointer(Integer(langData) + sizeof(LANGANDCODEPAGE) * i);
    s := Format('\StringFileInfo\%.4x%.4x\FileVersion', [lpTranslate^.wLanguage,
    lpTranslate^.wCodePage]);
    If VerQueryValue (lpData, PChar(s), Pointer(buf), lenBuf) then
    begin
    MessageBox(0, buf, '', MB_OK);
    break;
    end;
    end;
    finally
    FreeMem(lpData);
    end;
    end;
     
  5. Jeefo

    Jeefo Гость

    Репутация:
    0
    Благодарю за помощь
     
Загрузка...
Похожие Темы - Получение версии приложения
  1. OneDollar
    Ответов:
    6
    Просмотров:
    230
  2. Elektrolife
    Ответов:
    5
    Просмотров:
    207
  3. AL04E
    Ответов:
    4
    Просмотров:
    2.049
  4. ITman2K17
    Ответов:
    26
    Просмотров:
    3.116
  5. ITman2K17
    Ответов:
    16
    Просмотров:
    3.150

Поделиться этой страницей