//搜索视频设备,并返回视频设备名列表
void CVideoPlay::FindDevice(CStringList &DevName)
{
HRESULT hr;
int uIndex=0;
//创建一个系统设备枚举器接口
ICreateDevEnum *pCreateDevEnum;
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
IID_ICreateDevEnum, (void**)&pCreateDevEnum);
//创建一个类型枚举器,指向系统的视频设备列表
IEnumMoniker *pEm;
hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,
&pEm, 0);
HELPER_RELEASE(pCreateDevEnum);
if(pEm)
{
pEm->Reset();
ULONG cFetched;
IMoniker *pM;
//枚举每个视频设备
while(hr = pEm->Next(1, &pM, &cFetched), hr==S_OK)
{
IPropertyBag *pBag;
hr = pM->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pBag);
if(SUCCEEDED(hr))
{
VARIANT var;
var.vt = VT_BSTR;
//得到视频设备的友好名称
hr = pBag->Read(L"FriendlyName", &var, NULL);
if (hr == NOERROR)
{
CString achName;
WideCharToMultiByte(CP_ACP, 0, var.bstrVal, -1, achName.GetBuffer(50),80,NULL, NULL);
achName.ReleaseBuffer();
//将设备名添加到设备名列表末尾
DevName.AddTail(achName);
SysFreeString(var.bstrVal);
}
HELPER_RELEASE(pBag);
}
HELPER_RELEASE(pM);
uIndex++;
}
HELPER_RELEASE(pEm);
}
}
CVideoPlay::CVideoPlay()
{
pigb = NULL;
pimc = NULL;
pimex = NULL;
pivw = NULL;
pmp = NULL;
pVCap = NULL;
CappFg = NULL;
CapPigb = NULL;
}