MFC获取电脑上连接的多个摄像头名称和编号

C++获取电脑上连接的多个摄像头名称和编号

新建一个基于MFC对话框的工程

 

#include <iostream>

#include <string>

#include <vector>

#include <DShow.h>

#pragma   comment(lib,"Strmiids.lib")

using namespace std;

vector<CString>result;

int GetCameraName()

{

         CString str ;
         ICreateDevEnum *pDevEnum = NULL;
         IEnumMoniker *pEnum = NULL;
         int iCameraNum  = 0;
         HRESULT hr = NULL;
         CoInitialize(NULL);

         hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,         reinterpret_cast<void**>(&pDevEnum));
    if (SUCCEEDED(hr))
    {

            hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pEnum,0);
            if (hr == S_OK)
            {

                  / /枚举捕获设备
                  IMoniker *pMoniker = NULL;
                  ULONG cFetched;

                 while (pEnum->Next(1, &pMoniker, &cFetched) == S_OK)
               {          

                         IPropertyBag* pPropBag;
                         hr = pMoniker->BindToStorage(0,0,IID_IPropertyBag,reinterpret_cast<void**>(&pPropBag));    

                         if (SUCCEEDED(hr))
                        {

                                //获取设备名称
                                VARIANT varName;
                                varName.vt = VT_BSTR;
                                VariantInit(&varName);
                                hr = pPropBag->Read(L"FriendlyName", &varName, 0);

                                CString s(varName);

                                result.push_back(sReulst);

                                iCameraNum   ++;

                                pPropBag->Release();

                      }

                       pMoniker->Release();

            }

       } 

    }  

  CoUninitialize();

  return  iCameraNum  ;

}

void CGetCameraNameDlg::OnBnClickedOk()

{

    CString str,strResult;
    int ret = GetCameraName();
    if(result.size() <= 0)
        SetDlgItemText(IDC_EDIT1,_T("此设备没有摄像头"));
    else
    {
        for(int i = 0;i<result.size();i++)
        {
            if(i == 0)
                str.Format(_T("摄像头个数:%d\r\nID: %d     Name: %s\r\n"),ret,i,result[i]);
            else
                str.Format(_T("ID:%d     Name:%s\r\n"),i,toCString(result[i]));
            strResult += str;
        }
        SetDlgItemText(IDC_EDIT1,strResult);
    }  

}

这样就实现了获取设备上所有摄像头名称和编号。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值