Einzelnen Beitrag anzeigen

Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#15

Re: Prüfen welche Codecs sind installiert sind???

  Alt 26. Nov 2004, 15:15
Hi,

nein das hab ich nicht gemeint -g- Aber ich hab noch ne andere, imho noch einfachere Möglichkeit gefunden, die Codecs aufzulisten. Bisschen umschreiben und schon bekommste raus, ob der gesuchte Codec installiert ist:

Delphi-Quellcode:
(*
Benötigte Konstanten
--------------------
(hier werden als Beispiel ICMODE_FASTDECOMPRESS und ICTYPE_VIDEO benutzt)
*)

CONST
  ICMODE_COMPRESS = 1;
  ICMODE_DECOMPRESS = 2;
  ICMODE_FASTDECOMPRESS = 3;
  ICMODE_QUERY = 4;
  ICMODE_FASTCOMPRESS = 5;
  ICMODE_DRAW = 8;

  ICTYPE_VIDEO = ord ('v') +
                 ord ('i') shl 8 +
                 ord ('d') shl 16 +
                 ord ('c') shl 24;

(*
Benötigte Typen
----------------
*)

TYPE
  TICInfo = packed record
  // enthält Informationen über De/Compressor
    dwSize,
    fccType,
    fccHandler,
    dwFlags,
    dwVersio,
    dwVersionICM : DWORD;
    szName : array [0..15] of wchar;
    szDescription : array [0..127] of wchar;
    szDriver : array [0..127] of wchar;
  end;

(*
Benötigte Funktionen
--------------------
*)

  function ICInfo (fccType, fccHandler : DWORD; var ICInfo: TICInfo): BOOL;
  stdcall; external 'msvfw32.dllname 'ICInfo';

  function ICGetInfo (Handle: THandle; var ICInfo: TICInfo; cb: DWORD): LRESULT;
  stdcall; external 'msvfw32.dllname 'ICGetInfo';

  function ICClose (Handle: THandle): LRESULT;
  stdcall; external 'msvfw32.dllname 'ICClose';

  function ICOpen (fccType, fccHandler : DWORD; wMode: UINT): THandle;
  stdcall; external 'msvfw32.dllname 'ICOpen';

...

IMPLEMENTATION
...


PROCEDURE EnumerateVideoCodecs(aStrings : TStrings);
// Alle gefundenen Video-Codecs, die den Kriterien
// (hier: ICMODE_FASTDECOMPRESS =
// "Decompressor will perform fast (real-time) decompression")
// entsprechen, werden an aStrings angehängt.
VAR
  i : integer;
  info : TICInfo;
  hic : THandle;
begin
  i:=0;
  WHILE ICInfo(ICTYPE_VIDEO, i, info) DO
  BEGIN
    Hic := ICOpen(ICTYPE_VIDEO, i, ICMODE_FASTDECOMPRESS);
    IF Hic<>0 THEN
    BEGIN
      IF ICGetInfo(hic,info,SizeOf(info)) <> 0 THEN
      aStrings.Add(info.szName + ' (' + info.szDescription + ', ' + info.szDriver+ ')');
      ICClose(Hic);
    END;
    inc(i);
  END;
END;


{ ******************************* }

//edit: Beispielaufruf
procedure TForm1.FormCreate(Sender: TObject);
begin
  EnumerateVideoCodecs(Memo1.Lines);
end;
(abgeleitet von MSDN-Beispielen, Konstanten aus VfW.pas entnommen)


Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat