![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить версию своей программы.
Kolan © (2008-01-14 10:12:00)То, что в Version info в настройках проекта указывается?
pathfinder (2008-01-15 17:12:00) [1]
> Kolan © (14.01.08 11:37) [10]
Есть функция в sysutils, может подойдет..
function GetFileVersion(const AFileName: string): Cardinal;
Description
GetFileVersion returns the most significant 32 bits of a file binary version number.
Kolan (2008-01-15 10:44:00) [2]> [8] Slym © (14.01.08 11:16)
Работает благодарю.
Kolan (2008-01-14 11:37:00) [3]Странно, мне кажется у какого-нибудь TApplication должны быть готовые св-ва для чтения версии
Kolan (2008-01-14 11:35:00) [4]> [8] Slym © (14.01.08 11:16)
Размер радует, шас попробую
Slym (2008-01-14 11:16:00) [5]
function GetFileVersion(const FileName:string):string;
var
DataSize:LongWord;
pVerInfo,pData: Pointer;
Translation:string;
begin
result:='';
DataSize:=0;
DataSize:=GetFileVersionInfoSize(PChar(FileName),DataSize);
if DataSize=0 then Exit;
GetMem(pVerInfo, DataSize);
try
if GetFileVersionInfo(Pchar(FileName),0,DataSize,pVerInfo) then
begin
if VerQueryValue(pVerInfo, '\VarFileInfo\Translation', pData, DataSize) and (DataSize=SizeOf(LongWord)) then
Translation:=IntToHex(MakeLong(HiWord(PLongWord(pData)^), LoWord(PLongWord(pData)^)), 8)
else
exit;
if VerQueryValue(pVerInfo,PChar('\StringFileInfo\'+Translation+'\FileVersion'),pData,DataSize) then
SetString(result,PChar(pData),DataSize);
end;
finally
FreeMem(pVerInfo);
end;
end;
Slym (2008-01-14 10:54:00) [6]про TranslationString забыл :(
Slym (2008-01-14 10:52:00) [7]Ditrix © (14.01.08 10:36) [3]
многа букаф :)
function GetFileVersion(const FileName:string):string;
var
VerSize,Zero:LongWord;
VerPtr,pData: Pointer;
DataSize: LongWord;
begin
result:='';
Zero:=0;
VerSize:=GetFileVersionInfoSize(PChar(FileName),Zero);
if VerSize=0 then Exit;
GetMem(VerPtr, verSize);
try
if GetFileVersionInfo(Pchar(FileName),0,VerSize,VerPtr) then
if VerQueryValue(verPtr,'\\StringFileInfo\\041904E3\\FileVersion',pData,DataSize) then
SetString(result,PChar(pData),DataSize);
finally
FreeMem(verPtr);
end;
end;
oxffff (2008-01-14 10:46:00) [8]
> oxffff © (14.01.08 10:45) [4]
Это шутка. :)
oxffff (2008-01-14 10:45:00) [9]
> // В качестве параметра задать имя программы, если своей
> программы:
>
> FileVersion(Paramstr(0));
Тогда проще зайти в опции проекта и посмотреть.
Kolan (2008-01-14 10:36:00) [10]> См. PE HEADER
Я ессно нашел примеры вроде этого:
http://www.delphisources.ru/pages/faq/base/file_version_info.html
Нельзя ли это сделать проще?
Ditrix (2008-01-14 10:36:00) [11]function FileVersion(AFileName: string): string;
var
szName: array[0..255] of Char;
P: Pointer;
Value: Pointer;
Len: UINT;
GetTranslationString: string;
FFileName: PChar;
FValid: boolean;
FSize: DWORD;
FHandle: DWORD;
FBuffer: PChar;
begin
try
FFileName := StrPCopy(StrAlloc(Length(AFileName) + 1), AFileName);
FValid := False;
FSize := GetFileVersionInfoSize(FFileName, FHandle);
if FSize > 0 then
try
GetMem(FBuffer, FSize);
FValid := GetFileVersionInfo(FFileName, FHandle, FSize, FBuffer);
except
FValid := False;
raise;
end;
Result := '';
if FValid then
VerQueryValue(FBuffer, '\VarFileInfo\Translation', p, Len)
else
p := nil;
if P <> nil then
GetTranslationString := IntToHex(MakeLong(HiWord(Longint(P^)),
LoWord(Longint(P^))), 8);
if FValid then
begin
StrPCopy(szName, '\StringFileInfo\' + GetTranslationString +
'\FileVersion');
if VerQueryValue(FBuffer, szName, Value, Len) then
Result := StrPas(PChar(Value));
end;
finally
try
if FBuffer <> nil then
FreeMem(FBuffer, FSize);
except
end;
try
StrDispose(FFileName);
except
end;
end;
end;
// В качестве параметра задать имя программы, если своей программы:
FileVersion(Paramstr(0));
oxffff (2008-01-14 10:34:00) [12]См. PE HEADER
44h Word USER Major
46h Word USER Minor