IAudioSessionEnumerator-Schnittstelle (audiopolicy.h)
Die IAudioSessionEnumerator-Schnittstelle listet Audiositzungen auf einem Audiogerät auf. Um einen Verweis auf die IAudioSessionEnumerator-Schnittstelle des Sitzungsenumeratorobjekts abzurufen, muss die Anwendung IAudioSessionManager2::GetSessionEnumerator aufrufen.
Vererbung
Die IAudioSessionEnumerator-Schnittstelle erbt von der IUnknown-Schnittstelle . IAudioSessionEnumerator verfügt auch über folgende Membertypen:
Methoden
Die IAudioSessionEnumerator-Schnittstelle verfügt über diese Methoden.
IAudioSessionEnumerator::GetCount Die GetCount-Methode ruft die Gesamtanzahl der Audiositzungen ab, die auf dem Audiogerät geöffnet sind. |
IAudioSessionEnumerator::GetSession Die GetSession-Methode ruft die Audiositzung ab, die durch eine Audiositzungsnummer angegeben wird. |
Hinweise
Wenn eine Anwendung benachrichtigt werden möchte, wenn neue Sitzungen erstellt werden, muss sie ihre Implementierung von IAudioSessionNotification beim Sitzungs-Manager registrieren. Nach erfolgreicher Registrierung sendet der Sitzungs-Manager create-session-Benachrichtigungen in Form von Rückrufen an die Anwendung. Diese Benachrichtigungen enthalten einen Verweis auf den IAudioSessionControl-Zeiger der neu erstellten Sitzung.
Der Sitzungsenumerator verwaltet eine Liste der aktuellen Sitzungen, indem er Verweise auf den IAudioSessionControl-Zeiger jeder Sitzung enthält. Der Sitzungsenumerator ist jedoch möglicherweise nicht über die neuen Sitzungen informiert, die über IAudioSessionNotification gemeldet werden. In diesem Fall hätte die Anwendung nur Zugriff auf eine partielle Liste von Sitzungen. Dies kann auftreten, wenn der IAudioSessionControl-Zeiger (im Rückruf) vor der Initialisierung des Sitzungsenumerators freigegeben wird. Wenn eine Anwendung einen vollständigen Satz von Sitzungen für den Audioendpunkt wünscht, sollte die Anwendung daher eine eigene Liste verwalten.
Die Anwendung muss die folgenden Schritte ausführen, um Sitzungsbenachrichtigungen zu empfangen und eine Liste der aktuellen Sitzungen zu verwalten.
- Initialisieren Sie COM mit dem MTA-Modell (Multithreaded Apartment), indem Sie in einem Nicht-UI-Thread aufrufen
CoInitializeEx(NULL, COINIT_MULTITHREADED)
. Wenn MTA nicht initialisiert wird, empfängt die Anwendung keine Sitzungsbenachrichtigungen vom Sitzungs-Manager.Hinweis Threads, die die Benutzeroberfläche einer Anwendung ausführen, sollten mit dem Apartmentthreadingmodell initialisiert werden. - Aktivieren Sie eine IAudioSessionManager2-Schnittstelle vom Audioendpunktgerät. Rufen Sie IMMDevice::Activate auf, wobei parameter iid auf IID_IAudioSessionManager2 festgelegt ist. Dieser Aufruf empfängt einen Verweis auf die IAudioSessionManager2-Schnittstelle des Sitzungs-Managers im ppInterface-Parameter .
- Implementieren Sie die IAudioSessionNotification-Schnittstelle , um das Rückrufverhalten bereitzustellen.
- Rufen Sie IAudioSessionManager2::RegisterSessionNotification auf, um die Implementierung von IAudioSessionNotification in der Anwendung zu registrieren.
- Erstellen und initialisieren Sie das Sitzungsenumeratorobjekt, indem Sie IAudioSessionManager2::GetSessionEnumerator aufrufen. Diese Methode generiert eine Liste der aktuellen Sitzungen, die für den Endpunkt verfügbar sind, und fügt die IAudioSessionControl-Zeiger für jede Sitzung in der Liste hinzu, sofern sie noch nicht vorhanden sind.
- Verwenden Sie die IAudioSessionEnumerator-Schnittstelle , die im vorherigen Schritt zurückgegeben wurde, um die Liste der Sitzungen abzurufen und aufzulisten. Das Sitzungssteuerelement für jede Sitzung kann durch Aufrufen von IAudioSessionEnumerator::GetSession abgerufen werden. Stellen Sie sicher, dass Sie AddRef für jedes Sitzungssteuerelement aufrufen, um die Verweisanzahl beizubehalten.
- Wenn die Anwendung eine Create-Session-Benachrichtigung erhält, fügen Sie der Liste der vorhandenen Sitzungen den IAudioSessionControl-Zeiger der neuen Sitzung (empfangen in IAudioSessionNotification::OnSessionCreated) hinzu.
Ein Sitzungssteuerelement ist gültig, solange die Anwendung einen Verweis auf das Sitzungssteuerelement in der Liste enthält.
Beispiele
Der folgende Beispielcode zeigt, wie Sie das Sitzungsenumeratorobjekt erstellen und dann Sitzungen auflisten.
HRESULT EnumSessions(IAudioSessionManager2* pSessionManager)
{
if (!pSessionManager)
{
return E_INVALIDARG;
}
HRESULT hr = S_OK;
int cbSessionCount = 0;
LPWSTR pswSession = NULL;
IAudioSessionEnumerator* pSessionList = NULL;
IAudioSessionControl* pSessionControl = NULL;
// Get the current list of sessions.
CHECK_HR( hr = pSessionManager->GetSessionEnumerator(&pSessionList));
// Get the session count.
CHECK_HR( hr = pSessionList->GetCount(&cbSessionCount));
for (int index = 0 ; index < cbSessionCount ; index++)
{
CoTaskMemFree(pswSession);
SAFE_RELEASE(pSessionControl);
// Get the <n>th session.
CHECK_HR(hr = pSessionList->GetSession(index, &pSessionControl));
CHECK_HR(hr = pSessionControl->GetDisplayName(&pswSession));
wprintf_s(L"Session Name: %s\n", pswSession);
}
done:
CoTaskMemFree(pswSession);
SAFE_RELEASE(pSessionControl);
SAFE_RELEASE(pSessionList);
return hr;
}
Anforderungen
Unterstützte Mindestversion (Client) | Windows 7 [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 R2 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | audiopolicy.h |