C++ WASAPI GetDisplayName返回空白
我正在尝试编写一个与Windows Core Audio和WASAPI接口的程序。我在以下几行中遇到困难C++ WASAPI GetDisplayName返回空白,c++,windows,audio,wasapi,C++,Windows,Audio,Wasapi,我正在尝试编写一个与Windows Core Audio和WASAPI接口的程序。我在以下几行中遇到困难 CComHeapPtr<WCHAR> name; hr = pAudioSessionControl->GetDisplayName(&name); if (FAILED(hr)) { LOG(L"IAudioSessionControl::GetDisplayName() failed: hr = 0x%08x", hr); return -__L
CComHeapPtr<WCHAR> name;
hr = pAudioSessionControl->GetDisplayName(&name);
if (FAILED(hr)) {
LOG(L"IAudioSessionControl::GetDisplayName() failed: hr = 0x%08x", hr);
return -__LINE__; }
_tprintf(_T("Session Index %d, \"%s\"\n"), i, CString(name));
这是3个程序都处于活动状态并发出噪音。似乎我可以看到系统的声音程序,但没有其他
谢谢你的帮助
IAudioSessionControl::GetDisplayName
是合适的API,它可能返回非空字符串,但是您也可能看到字符串确实为空的非活动会话。在您的情况下,您可能会遇到非活动会话、未提供的错误代码或不正确的API使用
枚举会话并轮询卷更改-它打印非空字符串
CComHeapPtr<WCHAR> pszDisplayName;
ATLENSURE_SUCCEEDED(pSessionControl->GetDisplayName(&pszDisplayName));
_tprintf(_T("nSessionIndex %d, pszDisplayName \"%s\"\n"),
nSessionIndex, CString(pszDisplayName));
我的一个想法
问题应该与会话本身有关。大多数程序从不命名会话,因此会话通常没有名称,音频混合器上显示的名称可能是会话所有者进程的窗口标题的名称
使用IAudioSessionControl2::GetProcessID并通过其他API获取进程的窗口标题,应该会给出一个合理的名称,与audio mixer中的名称类似。感谢您的帮助。有关详细信息,请参见我的编辑。
CComHeapPtr<WCHAR> pszDisplayName;
ATLENSURE_SUCCEEDED(pSessionControl->GetDisplayName(&pszDisplayName));
_tprintf(_T("nSessionIndex %d, pszDisplayName \"%s\"\n"),
nSessionIndex, CString(pszDisplayName));