Delphi - Internet Explorer verzióját meghatározó komponens

forráskód letöltése
A TIEVersion komponens segítségével eldönthetjük, hogy az adott számítógépen milyen verziójú MS Internet Explorer van telepítve. Erre sokszor szükségünk lehet, ha olyan alkalmazást készítünk, mely kihasználja az Explorer nyújtotta lehetőségeket. A mellékelt példaprogram megnyitása előtt az IEVersion.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A MajorVersion property-ből tudhatjuk meg az IE fő verziószámát, míg a MinorVersion-ból az alverziószámot.

A BuildNumber property árulkodik arról a számról, ami az IE fordítási számát takarja.

A meghatározáshoz a Shdocvw.dll állomány verziószámát kérdezzük le a komponens konstruktoránál.
constructor TIEVersion.Create(AOwner: TComponent);
var
  dir: array[0..MAX_PATH+1] of char;
  size: DWORD;
  data, lang, info: pointer;
  i, c: integer;
  s, s2: string;
begin
  inherited;
  GetSystemDirectory(dir, MAX_PATH);
  size:=MAX_PATH+1;
  size:=GetFileVersionInfoSize(PChar(dir+'\shdocvw.dll'), size);
  if size>0 then begin
    GetMem(info, size);
    try
      if GetFileVersionInfo(PChar(dir+'\shdocvw.dll'),
            MAX_PATH+1, size, info) then begin
        size:=255;
        if VerQueryValue(info, '\VarFileInfo\Translation', lang, 
             size) then begin
          if VerQueryValue(info, Pchar(Format('\StringFileInfo\
                        %0.4x%0.4x\%s'#0, [LoWord(LongInt(
                        lang^)),  HiWord(LongInt(lang^)), 
                        'FileVersion'])), data, size)   then begin
            s:=StrPas(data);
            c:=0;
            s2:='';
            for i:=1 to Length(s) do begin
              if s[i]='.' then begin
                case c of
                  0: FMajorVersion:=StrToInt(s2);
                  1: FMinorVersion:=StrToInt(s2);
                  2: FBuildNumber:=StrToInt(s2);
                end;
                inc(c);
                s2:='';
              end else begin
                s2:=s2+s[i];
              end;
            end;
          end;
        end;
      end;
    finally
      FreeMem(info, size);
    end;
  end;
end;