首页 > 代码库 > DirectShow控制台输出和保存视频设备名称
DirectShow控制台输出和保存视频设备名称
#include "windows.h" #include "TCHAR.h" #include <dshow.h> #include <vector> #include <iostream> #include <cwctype> #define MAX_FRIENDLY_NAME_LENGTH 128 #define MAX_MONIKER_NAME_LENGTH 256 typedef struct _TDeviceName { WCHAR FriendlyName[MAX_FRIENDLY_NAME_LENGTH]; // 设备友好名 WCHAR MonikerName[MAX_MONIKER_NAME_LENGTH]; // 设备Moniker名 } TDeviceName; int _tmain(int argc, _TCHAR* argv[]) { TDeviceName name; HRESULT hr; // 初始化 std::vector<TDeviceName> vectorDevices; vectorDevices.clear(); // 初始化COM hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); if (FAILED(hr)) { return hr; } // 创建系统设备枚举器实例 ICreateDevEnum *pSysDevEnum = NULL; hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void **)&pSysDevEnum); if (FAILED(hr)) { CoUninitialize(); return hr; } // 获取设备类枚举器 IEnumMoniker *pEnumCat = NULL; hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnumCat, 0); if (hr == S_OK) { // 枚举设备名称 IMoniker *pMoniker = NULL; ULONG cFetched; while (pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK) { IPropertyBag *pPropBag; hr = pMoniker->BindToStorage(NULL, NULL, IID_IPropertyBag, (void **)&pPropBag); if (SUCCEEDED(hr)) { // 获取设备友好名 VARIANT varName; VariantInit(&varName); hr = pPropBag->Read(L"FriendlyName", &varName, NULL); if (SUCCEEDED(hr)) { StringCchCopy(name.FriendlyName, MAX_FRIENDLY_NAME_LENGTH, varName.bstrVal); std::wcout << name.FriendlyName << std::endl; // 获取设备Moniker名 LPOLESTR pOleDisplayName = reinterpret_cast<LPOLESTR>(CoTaskMemAlloc(MAX_MONIKER_NAME_LENGTH * 2)); if (pOleDisplayName != NULL) { hr = pMoniker->GetDisplayName(NULL, NULL, &pOleDisplayName); if (SUCCEEDED(hr)) { StringCchCopy(name.MonikerName, MAX_MONIKER_NAME_LENGTH, pOleDisplayName); vectorDevices.push_back(name); } CoTaskMemFree(pOleDisplayName); } } VariantClear(&varName); pPropBag->Release(); } pMoniker->Release(); } // End for While pEnumCat->Release(); } pSysDevEnum->Release(); CoUninitialize(); }
DirectShow控制台输出和保存视频设备名称
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。