[Решено|Устарело]Извлечение информации из исполняемого файла

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Re: Извлечение информации из исполняемого файла

Сообщение Снег Север » 11.01.2016 10:11:08

ANTIKLAN писал(а):Я так понял мне нужно открыть исходник модуля и посмотреть реализацию нужных классов и методов. Так? Можно ли это сделать из самой среды или нужно найти нужный файл в папке?

Если вы настолько не владеете средой разработки, то дело плохо...
Поступаете так - создаете пустой тестовый проект с одной формой. В секцию uses модуля добавляете FileInfo и сохраняете проект. Удерживая клавишу ctrl щелкаете левой кнопкой мыши на FileInfo - это открывает модуль в новой закладке. Там, в секции interface смотрите описания классов и функций. Например, TFileVersionInfo имеет свойство VersionStrings. Кладете на форму своего проекта компоненты Memo1 и кнопку (button1), жмете дважды левой клавишей мыши на button, чтобы создать обработчик Button1Click. В обработчике описываете переменную Version: TFileVersionInfo. Дальше пишете примерно следующее:
Код: Выделить всё
  Version:=TFileVersionInfo.create(Nil);
  Version.fileName := Application.ExeName;
    Memo1.Clear;
  for i := 0 to Version.VersionStrings.Count-1 do
  begin
    Memo1.Lines.Add('['+Version.VersionCategories[i]+']'+'='+Version.VersionStrings[i]);
  end;
  Version.Free;


Получаете полный список свойств, из которых потом берете в рабочую программу нужное. Модуль FileInfo хорошо откомментирован в тексте, так что не понять, что и как, сложно...
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3038
Зарегистрирован: 27.11.2007 16:14:47

Re: Извлечение информации из исполняемого файла

Сообщение Deimos » 11.01.2016 10:54:18

ANTIKLAN писал(а): функции или процедуры для Free Pascal для извлечения данных о версии

Код: Выделить всё
function get_version_info: string;
// initialize a bunch of stuff for this app when the form is first opened
// [0] = Major version, [1] = Minor ver, [3] = Revision, [4] = Build Number
// The above values can be found in the menu: Project > Project Options > Version Info
// Add the following to your uses statement: vinfo, versiontypes
var
   Info: TVersionInfo;
begin
  Info := TVersionInfo.Create;
  Info.Load(HINSTANCE);
  // grab just the Build Number
  result:='Версия: '+IntToStr(Info.FixedInfo.FileVersion[0])+'.'+IntToStr(Info.FixedInfo.FileVersion[1])+'.'+IntToStr(Info.FixedInfo.FileVersion[2])+'.'+IntToStr(Info.FixedInfo.FileVersion[3]);
  Info.Free;
end; 


Не забудьте в USES добавить vinfo;
Deimos
постоялец
 
Сообщения: 169
Зарегистрирован: 17.01.2010 00:31:30

Re: Извлечение информации из исполняемого файла

Сообщение ANTIKLAN » 11.01.2016 17:50:36

Снег Север писал(а):
ANTIKLAN писал(а):Я так понял мне нужно открыть исходник модуля и посмотреть реализацию нужных классов и методов. Так? Можно ли это сделать из самой среды или нужно найти нужный файл в папке?

Если вы настолько не владеете средой разработки, то дело плохо...
Поступаете так - создаете пустой тестовый проект с одной формой. В секцию uses модуля добавляете FileInfo и сохраняете проект. Удерживая клавишу ctrl щелкаете левой кнопкой мыши на FileInfo - это открывает модуль в новой закладке. Там, в секции interface смотрите описания классов и функций. Например, TFileVersionInfo имеет свойство VersionStrings. Кладете на форму своего проекта компоненты Memo1 и кнопку (button1), жмете дважды левой клавишей мыши на button, чтобы создать обработчик Button1Click. В обработчике описываете переменную Version: TFileVersionInfo. Дальше пишете примерно следующее:
Код: Выделить всё
  Version:=TFileVersionInfo.create(Nil);
  Version.fileName := Application.ExeName;
    Memo1.Clear;
  for i := 0 to Version.VersionStrings.Count-1 do
  begin
    Memo1.Lines.Add('['+Version.VersionCategories[i]+']'+'='+Version.VersionStrings[i]);
  end;
  Version.Free;


Получаете полный список свойств, из которых потом берете в рабочую программу нужное. Модуль FileInfo хорошо откомментирован в тексте, так что не понять, что и как, сложно...

Вот теперь все понятно. Теперь можно двигаться дальше. :D

Deimos писал(а):
ANTIKLAN писал(а): функции или процедуры для Free Pascal для извлечения данных о версии

Код: Выделить всё
function get_version_info: string;
// initialize a bunch of stuff for this app when the form is first opened
// [0] = Major version, [1] = Minor ver, [3] = Revision, [4] = Build Number
// The above values can be found in the menu: Project > Project Options > Version Info
// Add the following to your uses statement: vinfo, versiontypes
var
   Info: TVersionInfo;
begin
  Info := TVersionInfo.Create;
  Info.Load(HINSTANCE);
  // grab just the Build Number
  result:='Версия: '+IntToStr(Info.FixedInfo.FileVersion[0])+'.'+IntToStr(Info.FixedInfo.FileVersion[1])+'.'+IntToStr(Info.FixedInfo.FileVersion[2])+'.'+IntToStr(Info.FixedInfo.FileVersion[3]);
  Info.Free;
end; 


Не забудьте в USES добавить vinfo;

Спасибо большое. Развиваемся дальше. :D
Аватара пользователя
ANTIKLAN
новенький
 
Сообщения: 55
Зарегистрирован: 25.02.2015 09:21:42

Re: Извлечение информации из исполняемого файла

Сообщение ANTIKLAN » 13.01.2016 05:24:16

Все. Сделал. Вот что у меня получилось для отображения версии программы с использованием модуля FileInfo:
Код: Выделить всё
procedure TAboutForm.FormCreate(Sender: TObject);
var
  FileVersionInfo: TFileVersionInfo;
begin
  FileVersionInfo := TFileVersionInfo.Create(nil);
  FileVersionInfo.FileName := Application.ExeName;
  AboutVersionLabel.Caption := 'Версия: ' + FileVersionInfo.getVersionSetting('FileVersion');
  FileVersionInfo.Free;
end;
Аватара пользователя
ANTIKLAN
новенький
 
Сообщения: 55
Зарегистрирован: 25.02.2015 09:21:42

Пред.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru
cron