⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 searchdev.cpp

📁 这个程序包里有3个部分:直播服务器
💻 CPP
字号:
// SearchDev.cpp : implementation file
//

#include "stdafx.h"
#include "SearchDev.h"

CSearchDev::CSearchDev()
{
	m_iDevNum = 0;
	memset(m_DevInfo, 0, sizeof(m_DevInfo));
}

CSearchDev::~CSearchDev()
{
	for(int i=0; i<m_iDevNum; i++) m_DevInfo[i].pFilter->Release();
}

int CSearchDev::BeginSearch(BOOL bVideo)
{
	m_iDevNum = 0;
	memset(m_DevInfo, 0, sizeof(m_DevInfo));

	HRESULT			hr;
    ICreateDevEnum*	pCreateDevEnum;
    IEnumMoniker*	pEm;
    IMoniker*		pM;
    ULONG			cFetched;
	char			sFriendlyName[120];
	IPropertyBag*	pBag;

    hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
			  IID_ICreateDevEnum, (void**)&pCreateDevEnum);

    if (hr != S_OK)	{
		char	szErrText[MAX_PATH];
		AMGetErrorText(hr, szErrText, MAX_PATH);
		TRACE("CSearchDev>> CoCreateInstance >> %s\n", szErrText);
		return -1;
	}

	if(bVideo)
		hr = pCreateDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEm, 0);
	else
		hr = pCreateDevEnum->CreateClassEnumerator(CLSID_AudioInputDeviceCategory, &pEm, 0);
    pCreateDevEnum->Release(); // We don't need this anymore

    if (hr != S_OK)	{
		char	szErrText[MAX_PATH];
		AMGetErrorText(hr, szErrText, MAX_PATH);
		TRACE("CSearchDev>> CreateClassEnumerator >> %s\n", szErrText);
		return -1;
	}

    pEm->Reset();

	// Go through all the capture devices
    while(hr = pEm->Next(1, &pM, &cFetched), hr==S_OK)
    {
		sFriendlyName[0] = 0;

		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(SUCCEEDED(hr)) {
				WideCharToMultiByte(CP_ACP, 0, var.bstrVal, -1, sFriendlyName, 80, NULL, NULL);
				SysFreeString(var.bstrVal);

				IBaseFilter *pFilter;
				hr = pM->BindToObject(0, 0, IID_IBaseFilter, (void**)&pFilter);
				
				if (SUCCEEDED(hr)){
					m_DevInfo[m_iDevNum].pFilter = pFilter;
					strncpy(m_DevInfo[m_iDevNum].szFilterName, sFriendlyName, MAX_PATH);
					m_iDevNum++;
				}
			}
			pBag->Release();
		}

		pM->Release();
    }

    pEm->Release();
	return 0;
}

int	CSearchDev::GetTotalDevNumber()
{
	return m_iDevNum;
}
;

int CSearchDev::GetDevInfo(int iDevIndex, IBaseFilter** pFilter, char* pszName)
{
	if(m_iDevNum == 0) return -1;
	if(iDevIndex >=  m_iDevNum) return -1;

	if(pFilter) *pFilter = m_DevInfo[iDevIndex].pFilter;
	if(pszName != NULL) strncpy(pszName, m_DevInfo[iDevIndex].szFilterName, MAX_PATH);

	return 0;
}
;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -