📄 searchdev.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 + -