デバイスインスタンスパスの取得

C++

1 int i;2 int n;3 int ret;4 char buf[256] = "";5 char *pcharArray;6 String^ devicePath;7 String^ devInstance;8 ICreateDevEnum *pDevEnum = NULL;9 IEnumMoniker *pClassEnum = NULL;10 ULONG cFetched;11 IMoniker *pMoniker = NULL;12 IBaseFilter *pbf = NULL;13 IPropertyBag *pP = NULL;14 VARIANT var;15 IPropertyBag *pPropBag;16 HRESULT hr;17 18 pin_ptr<ICreateDevEnum*> p = &pDevEnum;19 CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, IID_ICreateDevEnum, (void **)p);20 pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pClassEnum, 0);21 22 n = 0;23 while (pClassEnum->Next(1, &pMoniker, &cFetched) == S_OK) {24 VariantClear(&var);25 26 hr = pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPropBag));27 if (FAILED(hr))28 {29 pMoniker->Release();30 continue;31 }32 33 hr = pPropBag->Read(L"FriendlyName", &var, 0);34 if (FAILED(hr))35 {36 continue;37 }38 WideCharToMultiByte(CP_ACP, 0, (OLECHAR*)(var.bstrVal), -1, buf, sizeof(buf) - 1, NULL, NULL);39 printf(buf);40 VariantClear(&var);41 42 hr = pPropBag->Read(L"DevicePath", &var, 0);43 if (SUCCEEDED(hr))44 {45 // The device path is not intended for display.46 printf("Device path: %S\n", var.bstrVal);47 }48 WideCharToMultiByte(CP_ACP, 0, (OLECHAR*)(var.bstrVal), -1, buf, sizeof(buf) - 1, NULL, NULL);49 50 printf(buf);51 printf("\r\n");52 53 VariantClear(&var);54 55 pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pbf); // モニカをフィルタオブジェクトにバインド56 57 pMoniker->Release();58 n++;59 }60 pDevEnum->Release(); // 以後に不要なメモリーをリリース61 pClassEnum->Release();

コメントを投稿

0 コメント