| Код | 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. | |