Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Определение наличия кодека


Автор: Black_Joker 8.7.2005, 08:33
Подскажите, пожалуйста, как можно определить установлен ли некоторый кодек в системе или нет
smile

Автор: Rennigth 8.7.2005, 08:55
здесь посмотри:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc

Автор: Black_Joker 8.7.2005, 18:36
А как это сделать программно?
smile smile smile

Автор: Black_Joker 30.7.2005, 10:42
Посмотрел
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc

не понял...
Где еще в реестре можно поискать "наличие кодека"

Автор: Girder 31.7.2005, 23:54
Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
 PACMFORMATDETAILSA=^_ACMFORMATDETAILSA;
 _ACMFORMATDETAILSA=packed record
  cbStruct:DWord;
  dwFormatIndex:DWord;
  dwFormatTag:DWord;
  fdwSupport:DWord;
  pwfx:Pointer;
  cbwfx:DWord;
  szFormat:array [1..128] of Char;
 end;
 PACMFORMATTAGDETAILSA=^_ACMFORMATTAGDETAILSA;
 _ACMFORMATTAGDETAILSA=packed record
  cbStruct:DWord;
  dwFormatTagIndex:DWord;
  dwFormatTag:DWord;
  cbFormatSize:DWord;
  fdwSupport:DWord;
  cStandardFormats:DWord;
  szFormatTag:array [1..48] of Char;
 end;
 _ACMDRIVERDETAILSA=packed record
  cbStruct:DWord;
  fccType:DWord;
  fccComp:DWord;
  wMid:Word;
  wPid:Word;
  vdwACM:DWord;
  vdwDriver:DWord;
  fdwSupport:DWord;
  cFormatTags:DWord;
  cFilterTags:DWord;
  hicon:HIcon;
  szShortName:array [1..32] of Char;
  szLongName:array [1..128] of Char;
  szCopyright:array [1..80] of Char;
  szLicensing:array [1..128] of Char;
  szFeatures:array [1..512] of Char;
 end;
 PICInfo=^TICInfo;
 TICInfo=packed record
  dwSize:DWord;
    fccType:DWord;
    fccHandler:DWord;
    dwFlags:DWord;
    dwVersion:DWord;
    dwVersionICM:DWord;
    szName:array [1..16] of WideChar;
    szDescription: array [1..128] of WideChar;
    szDriver: array [1..128] of WideChar;
 end;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  mSize:DWord;
  function acmDriverEnum(fnCallback:Pointer; dwInstance:DWord; fdwEnum:DWord):DWord; stdcall; external 'Msacm32.dll';
  function acmDriverOpen(var phad:DWord; hadid:DWord; fdwOpen:DWord):DWord; stdcall; external 'Msacm32.dll';
  function acmDriverClose(had:DWord; fdwClose:DWord):DWord; stdcall; external 'Msacm32.dll';
  function acmMetrics(hao:DWord; uMetric:DWord; pMetric: Pointer):DWord; stdcall; external 'Msacm32.dll';
  function acmFormatEnumA(had:DWord; pafd:PACMFORMATDETAILSA; fnCallback:Pointer; dwInstance:DWord; fdwEnum:DWord):DWord; stdcall; external 'Msacm32.dll';
  function acmDriverDetailsA(hadid:DWord; var padd:_ACMDRIVERDETAILSA; fdwDetails:DWord):DWord; stdcall; external 'Msacm32.dll';
  function acmFormatTagEnumA(had:DWord; paftd:PACMFORMATTAGDETAILSA; fnCallback:Pointer; dwInstance:DWord; fdwEnum:DWord):DWord; stdcall; external 'Msacm32.dll';
  function ICInfo(fccType:DWord; fccHandler:DWord; lpicinfo:PICInfo): BOOL; stdcall; external 'MSVFW32.DLL';
  function ICOpen(fccType:DWord; fccHandler:DWord; wMode:Word):DWord; stdcall; external 'MSVFW32.DLL';
  function ICGetInfo(hic:DWord; lpicinfo:PICInfo; cb:DWord):DWord; stdcall; external 'MSVFW32.DLL';
  function ICClose(hic:DWord):DWord; stdcall; external 'MSVFW32.DLL';

implementation

{$R *.dfm}

const
 ACM_DRIVERENUMF_DISABLED=$80000000;
 ACM_DRIVERENUMF_NOLOCAL=$40000000;
 ACM_METRIC_MAX_SIZE_FORMAT=50;
 ICMODE_QUERY=4;

function acmFormatEnumCallback(hadid:DWord; var pafd:_ACMFORMATDETAILSA; dwInstance:DWord; fdwSupport:DWord):Bool; stdcall;
begin
 if dwInstance=pafd.dwFormatTag then
  Form1.Memo1.Lines.Add(pafd.szFormat);
 Result:=true;
end; 

function acmFormatTagEnumCallback(hadid:DWord; var paftd:_ACMFORMATTAGDETAILSA; dwInstance:DWord; fdwSupport:DWord):Bool; stdcall;
var FD:_ACMFORMATDETAILSA;
    buf:PChar;
begin
 Form1.Memo1.Lines.Add(' - Формат:');
 Form1.Memo1.Lines.Add(paftd.szFormatTag);
 FillChar(FD,SizeOf(FD),#0);
 FD.cbStruct:=SizeOf(_ACMFORMATDETAILSA);
 GetMem(buf,mSize);
 FD.pwfx:=Buf;
 FD.cbwfx:=mSize;
 Form1.Memo1.Lines.Add(' -- Атрибуты:');
 acmFormatEnumA(dwInstance,@FD,@acmFormatEnumCallback,paftd.dwFormatTag,0);
 FreeMem(buf,mSize);
 Result:=true;
end;

function acmDriverEnumCallback(hadid:DWord; dwInstance:DWord; fdwSupport:DWord):Bool; stdcall;
var DD:_ACMDRIVERDETAILSA;
    FTD:_ACMFORMATTAGDETAILSA;
    had:DWord;
begin
 Result:=true;
 DD.cbStruct:=SizeOf(DD);
 Form1.Memo1.Lines.Add('Кодек:');
 if acmDriverDetailsA(hadid,DD,0)=0 then
  Form1.Memo1.Lines.Add(DD.szLongName);
 if acmDriverOpen(had,hadid,0)<>0 then exit;
 if acmMetrics(had,ACM_METRIC_MAX_SIZE_FORMAT,@mSize)=0 then
  begin
   FillChar(FTD,SizeOf(FTD),#0);
   FTD.cbStruct:=SizeOf(_ACMFORMATTAGDETAILSA);
   acmFormatTagEnumA(had,@FTD,@acmFormatTagEnumCallback,had,0);
  end;
 acmDriverClose(had,0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Clear;
 Memo1.Lines.Add('############-Звук-############');
 acmDriverEnum(@acmDriverEnumCallback,0,ACM_DRIVERENUMF_DISABLED);
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:Integer;
    Info:TICInfo;
    ic:DWord;
begin
 Memo1.Clear;
 Memo1.Lines.Add('############-Видео-############');
 i:=0;
 Info.dwSize:=SizeOf(Info);
 while ICInfo(0,i,@Info) do
  begin
   ic:=ICOpen(Info.fccType,Info.fccHandler,ICMODE_QUERY);
   ICGetInfo(ic,@Info,SizeOf(TICInfo));
   ICClose(ic);
   Memo1.Lines.Add(Info.szDescription);
   Inc(i);
  end;
end;

end.

Автор: klimuc 24.1.2008, 16:47
Bink 32 Video очень надо
 smile 

Автор: Smailik 20.12.2008, 14:23
незнаю, открывать ли новую тему %)
есть ли способ программно, тихо и молча, установить набор популярных кодеков (выборочно) если их нет в системе или имеются их старые версии?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)