//枚举硬件设备
ICreateDevEnum *pCreateDevEnum=0;
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,IID_ICreateDevEnum, (void**)&pCreateDevEnum);
//得到ICreateDevEnum 接口以后,枚举视频输入设备
hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEm, 0);
……
pEm->Reset();
ULONG cFetched;
IMoniker *pM;
while(hr = pEm->Next(1, &pM, &cFetched), hr==S_OK)
{
IPropertyBag *pBag=0;
hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag);
……
VARIANT var;
var.vt = VT_BSTR;
hr = pBag->Read(L"FriendlyName", &var, NULL);
……
WCHAR* wzName = NULL;
hr = pM->GetDisplayName(NULL, NULL, &wzName);
}
//判断视频输入设备是DV,还是其他类型
//如果该Filter上支持IAMExtTransport接口,则认为它是数码摄像机
IAMExtTransport* lpAMExtTransport = NULL;
hr = lpBaseFilter->QueryInterface(IID_IAMExtTransport, (void**)&lpAMExtTransport);
// 如果该Filter上支持IAMAnalogVideoDecoder接口,则认为它是WDM视频采集设备
IAMAnalogVideoDecoder* lpAMAnalogVideoDecoder = NULL;
hr = lpBaseFilter->QueryInterface(IID_IAMAnalogVideoDecoder, (void**)&lpAMAnalogVideoDecoder);
// 如果该Filter上支持IAMVfwCaptureDialogs接口,则认为它是VFW视频采集设备
IAMVfwCaptureDialogs* lpAMVfwCaptureDialogs = NULL;
hr = lpBaseFilter->QueryInterface(IID_IAMVfwCaptureDialogs, (void**)&lpAMVfwCaptureDialogs);
浙公网安备 33010602011771号