c语言编程获取局域网设备信息,如何在Windows上获取视频捕获设备(网络摄像头)列表? (C )...

从显示的示例中,将以下代码复制到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,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",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",0);

if (SUCCEEDED(hr))

{

printf("WaveIn ID: %d\n",var.lVal);

VariantClear(&var);

}

hr = pPropBag->Read(L"DevicePath",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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值