Как получить список устройств видеозахвата (веб-камер) на windowsх? (C ++)

Итак, у нас есть простое консольное приложение C ++ win32. Все, что мы хотим, это распечатать список веб-камер и других устройств захвата видео, которые доступны. Мы хотим использовать windows apis как можно больше – никаких внешних libs – в конце концов – все, что мы хотим, это распечатать aa list – не летать на луну!) Как это сделать?

Мой собственный ресурс: я нашел этот официальный образец msdn, но я до сих пор не понимаю, как выводить список устройств на экран = ((извините – я новичок в C ++)

… еще несколько ресерхов …

В одном из простейших ms образцов по теме найдено это

HRESULT OnInitDialog(HWND hwnd, ChooseDeviceParam *pParam) { HRESULT hr = S_OK; HWND hList = GetDlgItem(hwnd, IDC_DEVICE_LIST); // Display a list of the devices. for (DWORD i = 0; i count; i++) { WCHAR *szFriendlyName = NULL; hr = pParam->ppDevices[i]->GetAllocatedString( MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, &szFriendlyName, NULL ); if (FAILED(hr)) { break; } int index = ListBox_AddString(hList, szFriendlyName); ListBox_SetItemData(hList, index, i); CoTaskMemFree(szFriendlyName); } 

похоже, что он должен выполнять эту работу, но я не понимаю, как включить это в простое приложение командной строки, чтобы выводить данные …


также из этой серии:

  • Как получить список устройств захвата видео в Linux? и специальные сведения о получении камер NAMES с правильными, проверенными ответами
  • Как получить список устройств захвата видео в Mac OS? с правильными, еще не проверенными моими ответами
  • Как получить список устройств видеозахвата на windowsх? с правильными, проверенными ответами
  • Как получить список устройств захвата видео NAMES с использованием Qt (crossplatform)?

Из приведенных примеров скопируйте следующий код в dev.c. Затем откройте командную строку со всеми установленными параметрами SDK. В командной строке ссылка на ole32.lib и oleaut32.lib. Затем он покажет вам все устройства.

cl dev.c ole32.lib oleaut32.lib

dev.exe выдаст список в командной строке.

 #include  #include  #pragma comment(lib, "strmiids") HRESULT EnumerateDevices(REFGUID category, IEnumMoniker **ppEnum) { // Create the System Device Enumerator. ICreateDevEnum *pDevEnum; HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pDevEnum)); if (SUCCEEDED(hr)) { // Create an enumerator for the category. hr = pDevEnum->CreateClassEnumerator(category, ppEnum, 0); if (hr == S_FALSE) { hr = VFW_E_NOT_FOUND; // The category is empty. Treat as an error. } pDevEnum->Release(); } return hr; } void DisplayDeviceInformation(IEnumMoniker *pEnum) { IMoniker *pMoniker = NULL; while (pEnum->Next(1, &pMoniker, NULL) == S_OK) { IPropertyBag *pPropBag; HRESULT hr = pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPropBag)); if (FAILED(hr)) { pMoniker->Release(); continue; } VARIANT var; VariantInit(&var); // Get description or friendly name. hr = pPropBag->Read(L"Description", &var, 0); if (FAILED(hr)) { hr = pPropBag->Read(L"FriendlyName", &var, 0); } if (SUCCEEDED(hr)) { printf("%S\n", var.bstrVal); VariantClear(&var); } hr = pPropBag->Write(L"FriendlyName", &var); // WaveInID applies only to audio capture devices. hr = pPropBag->Read(L"WaveInID", &var, 0); if (SUCCEEDED(hr)) { printf("WaveIn ID: %d\n", var.lVal); VariantClear(&var); } hr = pPropBag->Read(L"DevicePath", &var, 0); if (SUCCEEDED(hr)) { // The device path is not intended for display. printf("Device path: %S\n", var.bstrVal); VariantClear(&var); } pPropBag->Release(); pMoniker->Release(); } } void main() { HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); if (SUCCEEDED(hr)) { IEnumMoniker *pEnum; hr = EnumerateDevices(CLSID_VideoInputDeviceCategory, &pEnum); if (SUCCEEDED(hr)) { DisplayDeviceInformation(pEnum); pEnum->Release(); } hr = EnumerateDevices(CLSID_AudioInputDeviceCategory, &pEnum); if (SUCCEEDED(hr)) { DisplayDeviceInformation(pEnum); pEnum->Release(); } CoUninitialize(); } } 

Это Microsoft, что могло бы разумно быть где-то около 10 строк кода, благодаря чудесам COM, заканчивается как несколько сотен строк или около того.

Как разрешить пользователю выбирать устройство записи видео (веб-камера) с помощью OpenCV?

ответ не определен opencv

  • Как я могу получить функциональность, похожую на Spy ++, в моем приложении C #?
  • Win32: Верните окно вверх
  • Системная ошибка. Код: 8. Недостаточно памяти для обработки этой команды
  • Что означает LPCWSTR и как с ним следует обращаться?
  • Как я читаю диск напрямую с .Net?
  • Как я могу установить разные тексты подсказок для каждого элемента в списке?
  • C ++ / Win32: Как дождаться завершения отложенного удаления?
  • Windows threading: _beginthread vs _beginthreadex vs CreateThread C ++
  • Получить скриншот конкретного приложения
  • Как изменить цвет наведения курсора
  • Вызов метода API Win32 из Java
  • Давайте будем гением компьютера.