Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.022 c
1-22067           DNT                   2001-12-15 16:20  2002.01.08  
Dialog & dll


14-22376          Новенький             2001-11-07 01:11  2002.01.08  
помогите кто-чем сможет


1-22196           T2                    2001-12-16 07:18  2002.01.08  
Desktop off


1-22029           neo_                  2001-12-18 12:33  2002.01.08  
убить TThread


3-21947           DieHard               2001-12-05 13:18  2002.01.08  
Получение из таблицы Oracle списка индексов