急求在VC里头获取摄像头名字的方法.
我的摄像头名字是:"USB PC Camera 301P"
如何在程序里头获取?
我查MSDN找到这个函数: capGetDriverDescription ,但是获得的是摄像头驱动的名字.
我弄了好久了,都没找到方法.求求各位做过摄像头程序的大哥指点一下迷津.
急!
问题点数:100、回复次数:9Top
1 楼fsweiwei(令狐上官冲)回复于 2006-03-20 13:52:24 得分 0
在线等.Top
2 楼tyong(伊面)回复于 2006-03-20 14:36:25 得分 0
DirectShow就很容易得到Top
3 楼tyong(伊面)回复于 2006-03-20 14:41:42 得分 98
// Create the System Device Enumerator.
HRESULT hr;
ICreateDevEnum *pSysDevEnum = NULL;
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
IID_ICreateDevEnum, (void **)&pSysDevEnum);
if (FAILED(hr))
{
return hr;
}
IEnumMoniker *pEnumCat = NULL;
hr=pSysDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnumCat, 0);
if (hr == S_OK)
{
// Enumerate the monikers.
IMoniker *pMoniker = NULL;
ULONG cFetched;
while(pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK)
{
IPropertyBag *pPropBag;
hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag,
(void **)&pPropBag);//知道设备的名称
if (SUCCEEDED(hr))
{
// To retrieve the filter's friendly name, do the following:
VARIANT varName;
VariantInit(&varName);
hr = pPropBag->Read(L"FriendlyName", &varName, 0);
if (SUCCEEDED(hr))
{
// Display the name in your UI somehow.
//varName保存的就是设备名称
}
VariantClear(&varName);
//Remember to release pFilter later.
pPropBag->Release();
}
pMoniker->Release();
}
pEnumCat->Release();
}
pSysDevEnum->Release();Top
4 楼tyong(伊面)回复于 2006-03-20 14:44:23 得分 0
你必须安装Direct SDK才能编译成功Top
5 楼fsweiwei(令狐上官冲)回复于 2006-03-21 14:27:48 得分 0
还有简单一点的方法吗?
这个方法我在试.Top
6 楼rageliu(天气好了就去长白山看水怪去了,嘿嘿...)回复于 2006-03-21 17:42:10 得分 2
简单的看看有没有采集卡的sdk,应该有提供吧Top
7 楼fsweiwei(令狐上官冲)回复于 2006-03-22 12:46:41 得分 0
编译通过了,不过运行到这一步时就会出错.
还有设备名称获取是varName.pcVal么?
hr=pSysDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnumCat, 0);Top
8 楼fsweiwei(令狐上官冲)回复于 2006-03-22 12:53:48 得分 0
CoCreateInstance好像没成功.
我在底下做了一点改动.
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
IID_ICreateDevEnum, (void **)&pSysDevEnum);
if (FAILED(hr))
{
exit(0);
}
每次都是直接退出了.Top
9 楼fsweiwei(令狐上官冲)回复于 2006-03-22 13:08:24 得分 0
需要include两个头文件
#include "strmif.h"
#include "uuids.h"
编译通过了.
我建了个对话框工程,放了一个BUTTON,然后把代码添进去,结果运行到CoCreateInstance时就会出错.
direct SDK已经装了,是不是还要进行什么设置?Top




