Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
7-15320
Дмитрий К.К.
2002-10-25 15:58
2003.01.06
Добавить в избранное: Opera


1-15148
Agent
2002-12-22 20:20
2003.01.06
Мастаки Help!!!!!!


1-15124
3asys
2002-12-23 12:07
2003.01.06
Перерисовка окна приложения при выполнении интенсивных вычислений


3-14950
SerVS_
2002-12-14 20:19
2003.01.06
Как получить значение автоинкриментного поля сразу после вставки?


14-15220
Calm
2002-12-15 16:27
2003.01.06
Трассировка. Как выполнить прогу до конца метода?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский