[ viking13 @ 27.02.2007. 14:35 ] @
Uz pomoć sledećeg koda

http://www.swissdelphicenter.ch/torry/showcode.php?id=1047

je moguće dobiti file version info, vrednosti za standardna polja (CompanyName, FileVersion...), kao i za nestandardna polja, ali pod uslovom da znate kako se zovu.

Problem je što meni treba lista svih polja koja se nalaze u versin info-u nekog fajla i njihove vrednosti, bez obzira na njihovo ime. Ako Fileinfo plugin za Total Commander to moze da izvede, znači da je moguće, samo pitanje kako.

Ja nisam uspeo da nađem ništa pametno, ima li neko neku ideju?
[ savkic @ 27.02.2007. 15:17 ] @
> Problem je što meni treba lista svih polja koja se nalaze u versin info-u nekog fajla i njihove vrednosti, bez obzira na njihovo ime.

Da li si probao JCL i funkcije iz JclFileUtils?
[ morlic @ 27.02.2007. 23:50 ] @
Ako koristis Jcl:

Code:

Uses JclFileUtils, Forms, ...;

...

Var
   FInfo: TJclFileVersionInfo;
begin
  FInfo:= TJclFileVersionInfo.Create(Application.ExeName);
  try
    FInfo.ProductVersion // Ovo ti je verzija samog exe fajla
    FInfo.Items.Values['naziv'] // Ovako pristupas slobodno definisanim poljima
  finally
    FInfo.Free;
  end;
end;


Znaci ides kroz FInfo.Items (string lista) i dobices sve nazive kljuceva i njihove vrednosti
[ viking13 @ 28.02.2007. 00:00 ] @
Evo sad sam probao i radi, ali što bi rekao moj prijatelj: "Not good enough. No UNICODE."

Nadao sam se da neko konkretno zna kako se to radi pa da mi objasni i da me uputi na određeni deo dokumentacije, pa da dodam i to u svoj kod.

Ovako moram da čeprkam po tuđem kodu, što i nije baš zahvalno.

Tnx, anyway...
[ morlic @ 28.02.2007. 08:38 ] @
Imas u toj Jcl klasi sasvim dovoljno materijala da sam sve uradis, prouci kod, tu se nalazi vise nego sto bi ti neko od nas rekao iz prve, jedino da ti napise sve od nule ;)

http://www.codeproject.com/file/fileversioninfo.asp

http://www.thescarms.com/vbasic/FileVersionInfo.asp

http://17slon.com/gp/gp/gpversion.htm
[ _deran_ @ 28.02.2007. 12:35 ] @
ne znam da li ce ti pomoci ali...

Code:

function get_verzija(fajl:string):integer;
var
  n, Len: DWORD;
  Buf: PChar;
  Value: PChar;
begin
  n := GetFileVersionInfoSize(PChar(fajl), n);
  if n > 0 then
  begin
    Buf := AllocMem(n);
    GetFileVersionInfo(PChar(fajl), 0, n, Buf);
      if VerQueryValue(Buf, PChar('StringFileInfo\040904E4\Verzija'), Pointer(Value), Len) then
       result:=strtoint(value);
    FreeMem(Buf, n);
  end;
end;
[ viking13 @ 28.02.2007. 23:50 ] @
Citat:
_deran_: ne znam da li ce ti pomoci ali...

'StringFileInfo\040904E4\Verzija'



Ovaj tvoj kod je dokaz da treba malo da se pozabavimo ovom tematikom.

Jedna vrednost, zakucana na 1 jezik, je daleko od onog što meni treba.
[ viking13 @ 28.02.2007. 23:59 ] @
Citat:
morlic: Imas u toj Jcl klasi sasvim dovoljno materijala da sam sve uradis, prouci kod, tu se nalazi vise nego sto bi ti neko od nas rekao iz prve, jedino da ti napise sve od nule ;)


Ne, ne želim da mi neko napiše sve od nule, želim da se malo pozabavimo tematikom. Mislim da je dovoljno zanimljiva i upotrebljiva.

Nije problem iskopirati JCL code i prepraviti ga da radi sa unicode-om, ideja je shvatiti kako to sve radi.

Zato bi ja da krenemo od VS_VERSIONINFO kao root strukture, pa da vidimo šta je tačno šta unutra.

Ima li zainteresovanih?
[ _deran_ @ 01.03.2007. 07:44 ] @
Citat:
Ovaj tvoj kod je dokaz da treba malo da se pozabavimo ovom tematikom.

Jedna vrednost, zakucana na 1 jezik, je daleko od onog što meni treba.


pogledaj primer
uz malo maste ces zaobici jedan jezik i jednu vrednost.