win32コンソールアプリケーションを空で作る
#include <dshow.h>
void main(void)
{
printf("コンソール表示開始\n");
// COM ライブラリを初期化する。
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
printf("COM ライブラリを初期化エラー");
return;
}
// System Device Enumerator を作成する。
//HRESULT hr;
ICreateDevEnum *pSysDevEnum = NULL;
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
IID_ICreateDevEnum, (void **)&pSysDevEnum);
if (FAILED(hr)) {
printf("System Device Enumerator を作成エラー");
MessageBox(0,0,0,0);//コンソールウインドウを閉じないように
return;
}
// ビデオ コンプレッサ カテゴリのクラス列挙子を取得する。
IEnumMoniker *pEnumCat = NULL;
hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoCompressorCategory, &pEnumCat, 0);
if (hr == S_OK)
{
// モニカを列挙する。
IMoniker *pMoniker = NULL;
ULONG cFetched;
while(pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK)
{
IPropertyBag *pPropBag;
hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag);
if (SUCCEEDED(hr))
{
// フィルタのフレンドリ名を取得するには、次の処理を行う。
VARIANT varName;
VariantInit(&varName);
hr = pPropBag->Read(L"FriendlyName", &varName, 0);
if (SUCCEEDED(hr))
{
// なんらかの方法で UI に名前を表示する。
wprintf(L"%s\n", varName.bstrVal);
}
VariantClear(&varName);
// フィルタのインスタンスを作成するには、次の処理を行う。
IBaseFilter *pFilter;
hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter,
(void**)&pFilter);
// ここでグラフにフィルタを追加する。
// 後で忘れずに pFilter を解放すること。
pPropBag->Release();
}
pMoniker->Release();
}
pEnumCat->Release();
}
pSysDevEnum->Release();
MessageBox(0,0,TEXT("OK"),0);//コンソールウインドウを閉じないようにする
}
CLSID_VideoCompressorCategory は10個(私の環境の場合)
フィルタ カテゴリを変更する場合
フィルタ カテゴリ 一覧

0 件のコメント:
コメントを投稿