2014-11-15 16 views
0

Windows Core Audio 및 WASAPI와 인터페이스하는 프로그램을 작성하려고합니다. 나는 다음과 같은 몇 개의 라인에 어려움을 겪고있다.WASAPI GetDisplayName이 공백을 반환합니다.

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)); 

출력 :

Session Index 0, "@%SystemRoot%\System32\AudioSrv.Dll,-202" 
Session Index 1, "" 
Session Index 2, "" 
Session Index 3, "" 
Press any key to continue . . . 

이 세 프로그램 모두 활성 및 제작 소음입니다. 그것은 시스템 소리 프로그램을 볼 수 있지만 아무것도 다른 것 같습니다.

도움 주셔서 감사합니다.

답변

1

IAudioSessionControl::GetDisplayName이 적절한 API이며 비어 있지 않은 문자열을 반환 할 수 있지만 문자열이 실제로 비어있는 비활성 세션이 표시 될 수도 있습니다. 귀하의 경우 비활성 세션, 제공하지 않은 오류 코드 또는 잘못된 API 사용을 클릭 할 수 있습니다.

This code snippet/application은 볼륨 변경을위한 세션 및 폴링을 열거합니다. 비어 있지 않은 문자열을 인쇄합니다.

CComHeapPtr<WCHAR> pszDisplayName; 
ATLENSURE_SUCCEEDED(pSessionControl->GetDisplayName(&pszDisplayName)); 
_tprintf(_T("nSessionIndex %d, pszDisplayName \"%s\"\n"), 
    nSessionIndex, CString(pszDisplayName)); 
C:\AudioSessionVolumeNotification\Debug>AudioSessionVolumeNotification.exe 
nSessionCount 5 
nSessionIndex 0, pszDisplayName "@%SystemRoot%\System32\AudioSrv.Dll,-202" 
nSessionIndex 1, pszDisplayName "Mozilla Firefox" 
nSessionIndex 2, pszDisplayName "Mozilla Thunderbird" 
nSessionIndex 3, pszDisplayName "Mozilla Firefox" 
nSessionIndex 4, pszDisplayName "" 
+0

도움 로마를 주셔서 감사합니다. 자세한 내용은 내 편집을 참조하십시오. – Jacky4566

0

another question에서 아이디어.

문제는 세션 자체에 관한 것이어야합니다. 대부분의 프로그램은 세션 이름을 지정하지 않으므로 일반적으로 세션에는 이름이 없으며 오디오 믹서에 표시된 이름은 세션의 소유자 프로세스의 창 제목 이름 일 수 있습니다.

IAudioSessionControl2::GetProcessID을 사용하고 다른 API를 통해 프로세스의 창 제목을 얻으면 합법적 인 이름을 오디오 믹서에서 가져와야합니다.