レストラン/カフェオーディオデバイス名からWindows
質問
がわかりやすく伝えるための フル オーディオデバイス名にはWindows XPの場合は、気がします。
利用できまMIXERCAPSがszPname会員限定32文字を含むはNULL。のためのオーディオデバイス名"マイク(hdオーディオデバイス)"とは、みち"マイクロホン(高の定義豪ドル".このよMAXPNAMELENているように定義され32.また再定義できる効果はありません。
こちらのコードを使用してい:
MIXERCAPS mc;
ZeroMemory( &mc, sizeof(MIXERCAPS) );
mm = mixerGetDevCaps( reinterpret_cast<UINT_PTR>(m_hMixer), &mc, sizeof(MIXERCAPS) );
見た この質問, ですが、参考文献Vista以降である。
解決
ご利用の場合はクラシックWindowsマルチメディアインターフェース、またはそらくできませんので周辺のMAXPNAMELENに限られてWindowsそのものです。
ができるかもしれなレストラン/カフェ/デバイス名をご利用の場合DirectSoundです。以下のコードは潜在的に秘ができればと思います。
BOOL CALLBACK EnumCallback(LPGUID guid, LPCSTR descr, LPCSTR modname, LPVOID ctx)
{
std::vector<std::string> *names = (std::vector<std::string>*)ctx;
names->push_back(std::string(descr));
return TRUE;
}
int main()
{
std::vector<std::string> names;
if (!FAILED(DirectSoundEnumerate(&EnumCallback, &names)))
{
// do stuff
}
}
他のヒント
きみdevcon.ご利用-マイクロソフトリサーチのサイト こちらの.
と思いdevcon listclassメディアがありますの結果ます。
以下にするにはデコード:
ここではト/ActiveX, でenumurates DirectSoundデバイスなどに包まれWaveOutする装置も手がけています。
procedure EnumAudioDevices;
var
dsCreateDevEnum : ICreateDevEnum;
EnumDevice : IEnumMoniker;
DeviceMoniker : IMoniker;
Data : Integer;
DevicePropBag : IPropertyBag;
DeviceName : OLEVariant;
I : Integer;
begin
// CLSID_CQzFilterClassManager = Entire DirectShow Filter List
If CoCreateInstance(CLSID_SystemDeviceEnum,nil,CLSCTX_INPROC_SERVER,IID_ICreateDevEnum,dsCreateDevEnum) = S_OK then
Begin
If dsCreateDevEnum.CreateClassEnumerator(CLSID_AudioRendererCategory,EnumDevice,0) = S_OK then
Begin
I := 0;
EnumDevice.Reset;
While EnumDevice.Next(1,DeviceMoniker,@Data) = S_OK do
Begin
If DeviceMoniker.BindToStorage(nil,nil,IID_IPropertyBag,DevicePropBag) = NOERROR then
Begin
If DevicePropBag.Read('FriendlyName',DeviceName,nil) = NOERROR then
Begin
// Success
ShowMessage(DeviceName);
Inc(I);
End;
DevicePropBag := nil;
End;
DeviceMoniker := nil;
End;
EnumDevice := nil;
End;
dsCreateDevEnum := nil;
End;
End;
所属していません StackOverflow