\\如何修改系统中已经注册的Filter的Merit值
typedef struct
{
DWORD dwVersion; //版本号
DWORD dwMerit; //Merit值
DWORD dwPinCount; //Pin的数量
DWORD dwReserved; //保留
}FILTER_HEADER;
BOOL SetFilterMerit(const char*inClsid,DWORD inMerit)
{
const char* cRegistryEntry="CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance\\";
const long cMaxLength=1024*16;
BYTE filterData[cMaxLength];
DWORD actualLength=0;
\\生成Filter信息注册部分的注册表入口
char szEntry[1000];
strcpy(szEntry,cRegistryEntry);
strcat(szEntry,inClsid);
HKEY hKey=NULL;
LONG result=::RegOpenKeyEx(HKEY_CLASSES_ROOT,szEntry,0,KEY_ALL_ACCESS,&hKey);
BOOL pass=(result==ERROR_SUCCESS);
if(pass)
{
\\读取FilterData的值
actualLength=actualLength;
result=::RegQueryValueEx(hKey,"FilterData",NULL,NULL,filterData,&actualLength);
pass=(result==ERROR_SUCCESS);
}
if(pass)
{
\\修改FiterData中的Merit部分,然后写回到注册表
FILTER_HEADER *filterHeader=(FILTER_HEADER *)filterData;
filterHeader->dwMerit=inMerit;
result=::RegSetValueEx(hKey,"FilterData",NULL,REG_BINARy,filterData,actualLength);
pass=(result==ERROR_SUCCESS);
}
if(hKey)
{
::RegCloseKey(hKey);
}
return pass;
}
DirectShow3
原文:https://www.cnblogs.com/xiaomi-daming/p/11510844.html