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.dll'
name '
ICInfo';
function ICGetInfo (
Handle: THandle;
var ICInfo: TICInfo; cb: DWORD): LRESULT;
stdcall;
external '
msvfw32.dll'
name '
ICGetInfo';
function ICClose (
Handle: THandle): LRESULT;
stdcall;
external '
msvfw32.dll'
name '
ICClose';
function ICOpen (fccType, fccHandler : DWORD; wMode: UINT): THandle;
stdcall;
external '
msvfw32.dll'
name '
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...