Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "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.56 MB
Час: 0.04 c
1-22174
chva
2001-12-21 00:50
2002.01.08
Пауза в роботі


7-22433
igor_prg
2001-09-25 21:28
2002.01.08
Як зареєструвати клас ???


14-22340
Yuraz
2001-11-06 10:09
2002.01.08
Люди, підкажіть де Cookie в W2K зберігаються, і як їх грохнути можна


4-22481
Stropal
2001-11-03 10:44
2002.01.08
Робота принтерів безпосередньо. порадьте


1-22073
HydraMarat
2001-12-19 00:22
2002.01.08
DLL або BPL





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в&#39;єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська