directX枚举系统设备类
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);
}
最新文章
- [WCF编程]6.绑定行为
- ios 给图片添加水印
- Delphi中的异常处理
- ios检测是否有网络
- Matalab IFS分形算法
- 前端工程筹建NodeJs+gulp+bower
- Socket 阻塞模式和非阻塞模式
- poj City Horizon (线段树+二分离散)
- Java中的对象Object方法之---wait()和notifiy()
- 源码包安装apache
- ssl证书 以及phpstudy配置ssl证书
- C#使用CefSharp开源库开发Chrome 浏览器
- P4312 [COCI 2009] OTOCI / 极地旅行社
- .NET中资源文件的使用
- __add__运行过程
- 基于Kafka消息驱动最终一致事务(二)
- C++标准 bind函数用法与C#简单实现
- 基于WordNet的英文同义词、近义词相似度评估及代码实现
- 用angular引入复杂的json文件2
- 普通用户开通sudo权限:xxx is not in the sudoers file.This incident will be reported.的解决方法
热门文章
- ABAP系统值
- BZOJ 1488: [HNOI2009]图的同构 [Polya]
- ettercap+urlsnarf+driftnet+wireshark监听妹子上网
- Azure Automation (6) 执行Azure SQL Job
- 福建百度seo和推广,关键词排名优化,网络营销推广培训
- 什么是 lnmp 实现原理。
- IDEA的导包优化问题
- Function与Object的关系
- navcat无法远程连接mysql数据库解决办法
- [SCOI2009][bzoj1025]游戏