Как извлечь версию файла из EXE/DLL? Эта функция возвратит строку в формате n.n.n.n и также выдвигает значения в переменные, переданные по ссылке.
Примечание: nValue1,2,3,4 ДОЛЖНЫ БЫТЬ различные переменные, или функция не будет работать!
function GetFileVersion(const sFilename: String;
var nValue1,nValue2,nValue3,nValue4: Integer): String;
var
pInfo,pPointer: Pointer;
nSize: DWORD;
nHandle: DWORD;
pVerInfo: PVSFIXEDFILEINFO;
nVerInfoSize: DWORD;
begin
Result:='?.?.?.?';
nValue1:=-1;
nValue2:=-1;
nValue3:=-1;
nValue4:=-1;
nSize:=GetFileVersionInfoSize(PChar(sFilename),nHandle);
if (nSize <>0) then begin
GetMem(pInfo,nSize);
try
FillChar(pInfo^,nSize,0);
if (GetFileVersionInfo(PChar(sFilename),nHandle,nSize,pInfo)) then begin
nVerInfoSize:=SizeOf(VS_FIXEDFILEINFO);
GetMem(pVerInfo,nVerInfoSize);
try
FillChar(pVerInfo^,nVerInfoSize,0);
pPointer:=Pointer(pVerInfo);
VerQueryValue(pInfo,'\',pPointer,nVerInfoSize);
nValue1:=PVSFIXEDFILEINFO(pPointer)^.dwFileVersionMS shr 16;
nValue2:=PVSFIXEDFILEINFO(pPointer)^.dwFileVersionMS and $FFFF;
nValue3:=PVSFIXEDFILEINFO(pPointer)^.dwFileVersionLS shr 16;
nValue4:=PVSFIXEDFILEINFO(pPointer)^.dwFileVersionLS and $FFFF;
Result:=IntToStr(nValue1)+'.'+IntToStr(nValue2)+'.'+
IntToStr(nValue3)+'.'+IntToStr(nValue4);
finally
FreeMem(pVerInfo,nVerInfoSize);
end;
end;
finally
FreeMem(pInfo,nSize);
end;
end;
end;
По материалам http://delphi.3000.com
|
Комментарии
RSS лента комментариев этой записи