Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.06;
Скачать: CL | DM;

Вниз

Количество Biuld ов проекта   Найти похожие ветки 

 
jee ©   (2002-12-24 12:04) [0]

Привет всем!
Хочется в About программы вставить количество билдов проекта. В справке есть пример с GetFileVersionInfo, однако он не работает. Include version information включено. В мемо выдается только его размер и больше ничего. Если кто знает в чем проблема, или как можно другим способом получить эту инфу, подскажите пожалуйста.


 
Игорь Шевченко ©   (2002-12-24 12:22) [1]

procedure TfAbout.FormCreate(Sender: TObject);

procedure GetFileVersion(FileName: string; var Major1, Major2,
Minor1, Minor2: Integer);
{ Helper function to get the actual file version information }
var
Info: Pointer;
InfoSize: DWORD;
FileInfo: PVSFixedFileInfo;
FileInfoSize: DWORD;
Tmp: DWORD;
begin
Major1 := 0;
Major2 := 0;
Minor1 := 0;
Minor2 := 0;
// Get the size of the FileVersionInformatioin
InfoSize := GetFileVersionInfoSize(PChar(FileName), Tmp);
// If InfoSize = 0, then the file may not exist, or
// it may not have file version information in it.
if InfoSize = 0 then
Exit;
// Allocate memory for the file version information
GetMem(Info, InfoSize);
try
// Get the information
GetFileVersionInfo(PChar(FileName), 0, InfoSize, Info);
// Query the information for the version
VerQueryValue(Info, "\", Pointer(FileInfo), FileInfoSize);
// Now fill in the version information
Major1 := FileInfo.dwFileVersionMS shr 16;
Major2 := FileInfo.dwFileVersionMS and $FFFF;
Minor1 := FileInfo.dwFileVersionLS shr 16;
Minor2 := FileInfo.dwFileVersionLS and $FFFF;
finally
FreeMem(Info, FileInfoSize);
end;
end;

var
VersionMajor: Integer;
VersionMinor: Integer;
Release, BuildNumber: Integer;

begin
if FileExists(Application.ExeName) then begin
GetFileVersion(Application.ExeName, VersionMajor, VersionMinor,
Release, BuildNumber);
cVersion.Caption := Format("Версия: %d.%d.%d (сборка %d)",
[VersionMajor, VersionMinor, Release, BuildNumber]);
end;
end;



 
jee ©   (2002-12-24 12:32) [2]

Спасибо огромное! Все заработало.
А можно пару комментариев? На сколько я понял, повлияла
VerQueryValue(Info, "\", Pointer(FileInfo), FileInfoSize);
строка вместо
VerQueryValue(Buf, PChar("StringFileInfo\040904E4\" + InfoStr[i], Pointer(Value), Len);
в примере.
Почему просто слэш надо ставить во втором параметре, и что это в экзампле за магические числа?


 
Игорь Шевченко ©   (2002-12-24 13:55) [3]

В экзампле выбор информации экзотического языка (откуда автор примера родом ?)

Кроме того, FileInfo (в моем примере) вроде не должно быть зависимым от языка :-)))


 
jee ©   (2002-12-24 14:20) [4]

Это да, прикольная структурка. :)) Еще раз спасибо.



Страницы: 1 вся ветка

Текущий архив: 2003.01.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
3-14931
atmamont
2002-12-12 00:47
2003.01.06
Посоветуйте что использовать для отчетов


1-15067
Ranikin
2002-12-25 11:38
2003.01.06
ActionList - программное изменение картинки


3-14964
Лесник
2002-12-15 00:01
2003.01.06
Кak cоздать БД M$ Access в рантайме


7-15343
Lizard
2002-10-23 11:31
2003.01.06
Помогите совместить два исходника в один.


3-14899
RAA
2002-12-12 22:48
2003.01.06
Как притормозить прогу на опреедлённое время?