Главная страница
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.017 c
1-94894
Ajax
2003-05-15 23:07
2003.05.29
Самое нижнее окно.


14-95053
Дмитрий К.К.
2003-05-08 05:52
2003.05.29
Именинники 8 мая


4-95154
Num Lock
2003-04-01 09:53
2003.05.29
Зачем посылать WM_USER после TrackPopupMenu?


14-95030
Style
2003-04-28 23:32
2003.05.29
Как вам дизай не слижком мрачно...


1-94855
Serguar
2003-05-20 10:01
2003.05.29
присвоение переменным значения Null