Форум: "WinAPI";
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];
ВнизВывод версии *.exe Найти похожие ветки
← →
Skiv (2001-11-05 09:55) [0]Можно ли прочесть верию файла без использования сторонних
компонент (классов) типа RX, LMD.
← →
Digitman (2001-11-05 10:27) [1]Можно. Все эти компоненты в конечном итоге обращаются к WINAPI-вызовам
GetFileVersionInfo, GetFileVersionInfoSize, VerQueryValue. Как, впрочем, и все прочие компоненты : все они изнутри обращаются к API (говоря правильней - компоненты инкапсулируют ф-ции API)
← →
Dimka Maslov (2001-11-05 11:02) [2]
type // File version record type
PFileVersion = ^TFileVersion;
TFileVersion = record
HiVersion : Integer; // Major version number
LoVersion : Integer; // Minor version number
Release : Integer;
Build : Integer;
end;
function FileVersion(const FileName: TString = ""): TFileVersion;
var
S: TString;
hMem: HGLOBAL;
Buf: pointer;
BufSize, Len, dwHandle: DWORD;
VerInfo: PVSFixedFileInfo;
pszName: PAnsiChar;
begin
FillChar(Result, SizeOf(Result), 0);
S:=FileName;
CleanUp(S, True);
if IsEmptyStr(S) then S:=ParamStr(0);
pszName:=@S[1];
BufSize:=GetFileVersionInfoSize(pszName, dwHandle);
if BufSize<>0 then begin
hMem:=GlobalAlloc(GHND, BufSize);
if hMem = 0 then OutOfMemoryError;
Buf:=GlobalLock(hMem);
if Buf=nil then OutOfMemoryError;
GetFileVersionInfo(pszName, dwHandle, BufSize, Buf);
VerQueryValue(Buf, "\", pointer(VerInfo), Len);
with VerInfo^ do begin
Result.HiVersion:=HiWord(dwFileVersionMS);
Result.LoVersion:=LoWord(dwFileVersionMS);
Result.Release:=HiWord(dwFileVersionLS);
Result.Build:=LoWord(dwFileVersionLS);
end;
GlobalUnlock(hMem);
GlobalFree(hMem);
end else Result.HiVersion:=-1;
end;
← →
Dimka Maslov (2001-11-05 11:06) [3]В примере нужно убрать CleanUp(S, True), a вызов IsEmptyStr(S)заменить на S = "", а TString на string
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.006 c