Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Версия продукта, отображается неправильно 
V
    Опции темы
Pavelbej
Дата 21.7.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Есть код для определения версии файла. Я изменил его для получения версии продукта:

Код

function FileVersion(const FileName: String): String;
var
  InfoSize, Wnd: DWORD;
  VerBuf: Pointer;
  FI: PVSFixedFileInfo;
  VerSize: DWORD;
begin
  Result := '';
  InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
  if InfoSize <> 0 then
  begin
    GetMem(VerBuf, InfoSize);
    try
      if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then
        if VerQueryValue(VerBuf, '\', Pointer(FI), VerSize) then
          Result := IntToStr(FI.dwProductVersionMS shr 16) + '.' +
          IntToStr(FI.dwProductVersionMS and $FFFF) + '.'+
          IntToStr(FI.dwProductVersionLS shr 16) + '.'+
          IntToStr(FI.dwProductVersionLS and $FFFF);
     finally
        FreeMem(VerBuf);
     end;
  end;
end;


Данной функцией я получаю версии браузеров IE, Firefox и Opera. У всех , версия отображается правильно, кроме Оперы. У меня версия 9.51, а результат - 9.0.0.0
Подскажите, где ошибка?
PM MAIL   Вверх
Poseidon
Дата 22.7.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Код

function GetExeInfo(sAppName:string):STRING;
type
  PTransBuffer = ^TTransBuffer;
  TTransBuffer = array[1..4] of smallint;
var
  iAppSize, iLenOfValue : DWord;
  pcBuf,pcValue         : PChar;
  VerSize               : DWord;
  pTrans                : PTransBuffer;
  TransStr              : string;
  fvip                  : pointer;
  ft                    : TFileTime;
  st                    : TSystemTime;
  i:Integer;
  const
  tmp : array [0..9] of string = ('CompanyName','FileDescription','FileVersion',
                                   'InternalName','LegalCopyright', 'LegalTradeMarks',
                                   'OriginalFileName','ProductName',
                                   'ProductVersion','Comments' );

begin
  // get version information values
  iAppSize:= GetFileVersionInfoSize(PChar(sAppName),// pointer to filename string
                                    iAppSize);      // pointer to variable to receive zero
   // if GetFileVersionInfoSize is successful
  if iAppSize > 0 then
    begin
      pcBuf := AllocMem(iAppSize);
      GetFileVersionInfo(PChar(sAppName),              // pointer to filename string
                         0,                            // ignored
                         iAppSize,                     // size of buffer
                         pcBuf);                       // pointer to buffer to receive file-version info.

      VerQueryValue(pcBuf, '\', fvip, iLenOfValue);
      VerQueryValue(pcBuf, PChar('\VarFileInfo\Translation'),pointer(ptrans), verSize);
      TransStr:= IntToHex(ptrans^[1], 4) + IntToHex(ptrans^[2], 4);

      for i:=0 to 9 do
      begin
        if VerQueryValue(pcBuf,PChar('StringFileInfo\' + TransStr + '\' + tmp[i] ), Pointer(pcValue),iLenOfValue) then
         if length(pcValue) > 0  then Result := Result + tmp[i] + ': '+ pcValue + #13+#10;
      end;
      FreeMem(pcBuf,iAppSize);
    end;
end;



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Pavelbej
Дата 22.7.2008, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 419
Регистрация: 5.7.2005

Репутация: нет
Всего: 6



Poseidon,  то что нужно,  smile 
Спасибо огромное!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.