#include <stdio.h>//printf とかで必要
#include<windows.h>//MessageBox とかで必要
#include <wmsdk.h>
#pragma comment(lib, "wmvcore.lib")
void main(void)
{
printf("コンソール表示開始\n");
HRESULT GetCodecNames(IWMCodecInfo3* pCodecInfo);
IWMCodecInfo3* pCodecInfo = NULL;
IWMProfileManager* pProfileManager = NULL;
HRESULT hr = S_FALSE;
DWORD cCodecs = 0;
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
hr = WMCreateProfileManager(&pProfileManager);
hr = pProfileManager->QueryInterface(IID_IWMCodecInfo3, (void**)(&pCodecInfo));\
//システム上でサポートされているオーディオコーデックの数を取得します。
hr = pCodecInfo->GetCodecInfoCount(WMMEDIATYPE_Audio, &cCodecs);
if(SUCCEEDED(hr))
printf("オーディオコーデックの数: %d\n\n", cCodecs);
else
{
printf("オーディオコーデックの数を取得できませんでした。\n");
return;
}
MessageBox(0,0,TEXT("OK"),0);
}
コーデックの数が正しいか調べてみたがよく分からない。
Windows Media Player のヘルプ-バージョン情報-テクニカルサポート情報
でコーデックを確認してみた。
コーデック名の取得
参考:
http://msdn.microsoft.com/ja-jp/library/windows/desktop/dd743771(v=vs.85).aspx
#include <stdio.h>//printf とかで必要
#include<windows.h>//MessageBox とかで必要
#include <wmsdk.h>
#pragma comment(lib, "wmvcore.lib")
void main(void)
{
printf("コンソール表示開始\n");
HRESULT GetCodecNames(IWMCodecInfo3* pCodecInfo);
IWMCodecInfo3* pCodecInfo = NULL;
IWMProfileManager* pProfileManager = NULL;
HRESULT hr = S_FALSE;
DWORD cCodecs = 0;
WCHAR* pwszCodecName = NULL;
DWORD cchCodecName = 0;
hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
hr = WMCreateProfileManager(&pProfileManager);
hr = pProfileManager->QueryInterface(IID_IWMCodecInfo3, (void**)(&pCodecInfo));\
//システム上でサポートされているオーディオコーデックの数を取得します。
hr = pCodecInfo->GetCodecInfoCount(WMMEDIATYPE_Audio, &cCodecs);
if(SUCCEEDED(hr))
printf("オーディオコーデックの数: %d\n\n", cCodecs);
else
{
printf("オーディオコーデックの数を取得できませんでした。\n");
return;
}
/* ----------- オーディオコーデックの名前を取得 ----------- */
//すべてのオーディオコーデックをループ。
for(DWORD dwCodecIndex = 0; dwCodecIndex < cCodecs; dwCodecIndex++)
{
//まず、名前のサイズを取得する。
hr = pCodecInfo->GetCodecName(WMMEDIATYPE_Audio, dwCodecIndex, NULL, &cchCodecName);
if(FAILED(hr))
{
printf("コーデック名のサイズを取得できませんでした。\n");
return;
}
//適切なサイズの文字列を割り当てます。
pwszCodecName = new WCHAR[cchCodecName];
if(pwszCodecName == NULL)
{
printf("メモリを割り当てられませんでした\n");
return;
}
// コーデック名を取得します。
hr = pCodecInfo->GetCodecName(WMMEDIATYPE_Audio,dwCodecIndex,pwszCodecName,&cchCodecName);
if(FAILED(hr))
{
delete[] pwszCodecName;
printf("コーデック名を取得できませんでした。\n");
return;
}
// コーデック名を出力する。
printf("%d %S\n", dwCodecIndex, pwszCodecName);
// 次の繰り返しのためにクリーンアップします。
delete[] pwszCodecName;
pwszCodecName = NULL;
cchCodecName = 0;
}
MessageBox(0,0,TEXT("OK"),0);
}

よくわからないな・・・・・