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

Вниз

Как получить версию программы из нее самой   Найти похожие ветки 

 
lipskiy ©   (2003-05-14 21:01) [0]

не прибегая к виндовым функциям, спрашивающим версию через имя файла. Зачем о самом себе спрашивать у винды. Как вынуть эту инфу напрямик?


 
panov ©   (2003-05-14 21:15) [1]

const
ver="1.1"
...

ShowMessage(ver);


 
Mystic ©   (2003-05-14 21:22) [2]

function TAdminLoginForm.GetApplicationVer : String;
var
Buffer : pointer;
FileName : String;
Stub : DWORD;
Size : integer;
VerInfo : pointer;
Length : UINT;
begin
FileName := ParamStr (0);

Size := GetFileVersionInfoSize(PChar(FileName), Stub);
if Size = 0 then
begin
ShowMessage(IntToStr(GetLastError()));
Size := 1024 * 10;
end;
Buffer := AllocMem (Size);

if not GetFileVersionInfo (PChar(FileName), 0, Size, Buffer) then
begin
ShowMessage(IntToStr(GetLastError()));
end;

VerQueryValue(Buffer, "\", VerInfo, Length);

result:=inttostr(tVSFIXEDFILEINFO(VerInfo^).dwFileVersionMS shr 16)+"."+
inttostr(tVSFIXEDFILEINFO(VerInfo^).dwFileVersionMS and $FFFF)+"."+
inttostr(tVSFIXEDFILEINFO(VerInfo^).dwFileVersionLS shr 16)+"."+
inttostr(tVSFIXEDFILEINFO(VerInfo^).dwFileVersionLS and $FFFF);

FreeMem (Buffer);
end;


Не сильно чистил, но идея должна біть понятна...


 
Вася Пупкин ©   (2003-05-14 21:24) [3]

http://delphimaster.net/view/1-1052739595/


 
Mystic ©   (2003-05-14 21:25) [4]

Немного присмотрелся к коду. Предупреждаю --- писал не я :)


 
Palladin ©   (2003-05-14 21:34) [5]

хм, а что случилось?
почему не надо прибегать к виндовым функциям?


 
Mystic ©   (2003-05-14 23:05) [6]

> хм, а что случилось?

Если ты мне, то
1. FreeMem должно быть в finally-блоке
2. После ShowMessage надо ставить выход


 
Palladin ©   (2003-05-15 08:25) [7]

да нет, я автору поста...


 
dtrn   (2003-05-15 12:12) [8]

function MyVerInfo(NameFile:string):string;
var
VInfoSize,DetSize:DWord;
PVInfo,pDetail:Pointer;
begin
if not FileExists(NameFile) then
NameFile:=Application.ExeName;
VInfoSize:=GetFileVersionInfoSize(PChar(NameFile),DetSize);
if VInfoSize>0 then
begin
GetMem(pVInfo,VInfoSize);
try
GetFileVersionInfo(Pchar(NameFile),0,VInfoSize,pVInfo);
verQueryValue(pVInfo,"\",pDetail,DetSize);
with TVSFixedFileInfo (pDetail^) do
Result:=
IntToStr(dwFileVersionMS shr 16)+"."+
IntToStr(dwFileVersionMS and $FFFF)+"."+
IntToStr(dwFileVersionLS shr 16)+"."+
IntToStr(dwFileVersionLS and $FFFF);
finally
FreeMem(pVInfo);
end;
end
else
Result:="0";
end;


 
lipskiy ©   (2003-05-17 00:18) [9]


> panov © (14.05.03 21:15)

Я имел ввиду ту информацию о версии, которая компилируется в ехешник, когда разрешена опция "Include Version Information in Project" в настройках проекта. Удобно лишь в одном месте ее поменяв показывать потом везде где надо.

> Palladin © (14.05.03 21:34)

Я не говорю, что нельзя.
Интерес чисто спортивный.
Если в файл включена информация, то зачем кого-то со стороны просить вынуть ее из себя чтобы вернуть обратно. Можно же самому свои ресурсы посмотреть.

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



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
1-94852
NAlexey
2003-05-19 16:11
2003.05.29
Непрозрачный bitmap в TDragImageList?


1-94837
PAI
2003-05-19 18:53
2003.05.29
Как создать потомка VCL-класса?


1-94817
evvcom
2003-05-16 11:35
2003.05.29
Есть ли такая мнемокоманда в TASM


1-94963
andrey_pst
2003-05-18 13:27
2003.05.29
PopUp-меню в стиле XP


3-94710
Пикулев Евгений
2003-05-08 05:57
2003.05.29
Как из одной таблицы принять данные в другую такуюже