Форум: "Основная";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];
ВнизКоличество 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.033 c