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);
}

最新文章

  1. [WCF编程]6.绑定行为
  2. ios 给图片添加水印
  3. Delphi中的异常处理
  4. ios检测是否有网络
  5. Matalab IFS分形算法
  6. 前端工程筹建NodeJs+gulp+bower
  7. Socket 阻塞模式和非阻塞模式
  8. poj City Horizon (线段树+二分离散)
  9. Java中的对象Object方法之---wait()和notifiy()
  10. 源码包安装apache
  11. ssl证书 以及phpstudy配置ssl证书
  12. C#使用CefSharp开源库开发Chrome 浏览器
  13. P4312 [COCI 2009] OTOCI / 极地旅行社
  14. .NET中资源文件的使用
  15. __add__运行过程
  16. 基于Kafka消息驱动最终一致事务(二)
  17. C++标准 bind函数用法与C#简单实现
  18. 基于WordNet的英文同义词、近义词相似度评估及代码实现
  19. 用angular引入复杂的json文件2
  20. 普通用户开通sudo权限:xxx is not in the sudoers file.This incident will be reported.的解决方法

热门文章

  1. ABAP系统值
  2. BZOJ 1488: [HNOI2009]图的同构 [Polya]
  3. ettercap+urlsnarf+driftnet+wireshark监听妹子上网
  4. Azure Automation (6) 执行Azure SQL Job
  5. 福建百度seo和推广,关键词排名优化,网络营销推广培训
  6. 什么是 lnmp 实现原理。
  7. IDEA的导包优化问题
  8. Function与Object的关系
  9. navcat无法远程连接mysql数据库解决办法
  10. [SCOI2009][bzoj1025]游戏