directX枚举系统设备类

简介: void CSysEnumDlg::DisplayFullCategorySet(void)<br>{<br>    USES_CONVERSION;<br><br><br>    HRESULT hr;<br>    IEnumMoniker *pEmCat = 0;<br>    ICreateDevEnum *pCreateDevEnum = NULL;<br>    int nClas
void CSysEnumDlg::DisplayFullCategorySet(void)
{
    USES_CONVERSION;


    HRESULT hr;
    IEnumMoniker *pEmCat = 0;
    ICreateDevEnum *pCreateDevEnum = NULL;
    int nClasses=0;


    // Create an enumerator
    hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
                          IID_ICreateDevEnum, (void**)&pCreateDevEnum);
    ASSERT(SUCCEEDED(hr));
    if (FAILED(hr))
        return;


    // Use the meta-category that contains a list of all categories.
    // This emulates the behavior of GraphEdit.
    hr = pCreateDevEnum->CreateClassEnumerator(
                         CLSID_ActiveMovieCategories, &pEmCat, 0);
    ASSERT(SUCCEEDED(hr));


    if(hr == S_OK)
    {
        IMoniker *pMCat;
        ULONG cFetched;


        // Enumerate over every category
        while(hr = pEmCat->Next(1, &pMCat, &cFetched),
              hr == S_OK)
        {
            IPropertyBag *pPropBag;


            // Associate moniker with a file
            hr = pMCat->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag);
            if(SUCCEEDED(hr))
            {
                VARIANT varCatClsid;
                varCatClsid.vt = VT_BSTR;


                // Read CLSID string from property bag
                hr = pPropBag->Read(L"CLSID", &varCatClsid, 0);
                if(SUCCEEDED(hr))
                {
                    CLSID clsidCat;//枚举所有的设备类


                    if(CLSIDFromString(varCatClsid.bstrVal, &clsidCat) == S_OK)
                    {
                        // Use the guid if we can't get the name
                        WCHAR *wszCatName;
                        TCHAR szCatDesc[MAX_PATH];


                        VARIANT varCatName;
                        varCatName.vt = VT_BSTR;


                        // Read filter name
                        hr = pPropBag->Read(L"FriendlyName", &varCatName, 0);
                        if(SUCCEEDED(hr))
                            wszCatName = varCatName.bstrVal;
                        else
                            wszCatName = varCatClsid.bstrVal;


#ifndef UNICODE
                        WideCharToMultiByte(
                                CP_ACP, 0, wszCatName, -1,
                                szCatDesc, sizeof(szCatDesc), 0, 0);
#else
                        lstrcpy(szCatDesc, W2T(wszCatName));
#endif


                        if(SUCCEEDED(hr))
                            SysFreeString(varCatName.bstrVal);


                        // Add category name and CLSID to list box
                        AddFilterCategory(szCatDesc, &clsidCat);
                        nClasses++;
                    }


                    SysFreeString(varCatClsid.bstrVal);
                }


                pPropBag->Release();
            }
            else
            {
                break;
            }


            pMCat->Release();
        } // for loop


        pEmCat->Release();
    }


    pCreateDevEnum->Release();


    // Update listbox title with number of classes
    SetNumClasses(nClasses);
}
相关文章
|
存储 程序员 编译器
windows下的串口编程,串口操作类封装
windows下的串口编程,串口操作类封装
|
缓存 程序员 芯片
MOTOROLA MVME-707 用于实现该逻辑的设备类型
MOTOROLA MVME-707 用于实现该逻辑的设备类型
100 0
MOTOROLA MVME-707 用于实现该逻辑的设备类型
iOS UIActivityIndicatorView(指示控制器)用法总结
iOS UIActivityIndicatorView(指示控制器)用法总结
240 0
服务开发+虚拟设备完成设备属性变更模拟
为了测试物联网平台数据分析的GIS组件,我们准备模拟一个设备随机在一定范围内(比如在(120±0.05,30±0.01)附近,避免一下子跑到非洲,一下子跑到南极)上报地理信息。由于物联网平台的虚拟设备推送只能定时推送+全取值范围随机数值,不能满足有一定数学表达式的推送策略。如果手上没有设备(尤其是正常设备无法通过热点WIFI接入测试环境),又想在云端持续的模拟设备行为,怎么办呢?通过服务开发+虚拟
1358 0
|
Windows
WINDOWS特有的消息常量标识符
  '========================================'WINDOWS特有的消息常量标识符'========================================Public Const WM_NULL = &H0&Public Const WM_C...
944 0
|
Windows Swift
在windows上操练swift语言:类和结构体
条件所限,只能在WINDOWS上学习SWIFT的基本语法。 还有,有swift for windows 1.9帮忙, 看书没那么燥。。。。
2659 0
|
Web App开发 网络协议 网络安全

热门文章

最新文章