Freigeben über


IAudioSessionNotification-Schnittstelle (audiopolicy.h)

Die IAudioSessionNotification-Schnittstelle stellt Benachrichtigungen bereit, wenn eine Audiositzung erstellt wird.

Vererbung

Die IAudioSessionNotification-Schnittstelle erbt von der IUnknown-Schnittstelle . IAudioSessionNotification verfügt auch über folgende Arten von Membern:

Methoden

Die IAudioSessionNotification-Schnittstelle verfügt über diese Methoden.

 
IAudioSessionNotification::OnSessionCreated

Die OnSessionCreated-Methode benachrichtigt die registrierten Prozesse, dass die Audiositzung erstellt wurde.

Hinweise

Im Gegensatz zu den anderen WASAPI-Schnittstellen, die von der WASAPI-Systemkomponente implementiert werden, wird die IAudioSessionNotification-Schnittstelle von der Anwendung implementiert. Zum Empfangen von Ereignisbenachrichtigungen übergibt die Anwendung an die IAudioSessionManager2::RegisterSessionNotification-Methode einen Zeiger auf die IAudioSessionNotification-Implementierung .

Nach der Registrierung der IAudioSessionNotification-Schnittstelle empfängt die Anwendung Ereignisbenachrichtigungen in Form von Rückrufen über die Methoden in der Schnittstelle.

Wenn die Anwendung keine Benachrichtigungen mehr empfangen muss, ruft sie die IAudioSessionManager2::UnregisterSessionNotification-Methode auf. Diese Methode entfernt die Registrierung einer IAudioSessionNotification-Schnittstelle , die die Anwendung zuvor registriert hat.

Die Anwendung darf Benachrichtigungsrückrufe während eines Ereignisrückrufs nicht registrieren oder aufheben.

Der Sitzungsenumerator ist möglicherweise nicht über die neuen Sitzungen informiert, die über IAudioSessionNotification gemeldet werden. Wenn sich eine Anwendung also ausschließlich auf den Sitzungsenumerator zum Abrufen aller Sitzungen für einen Audioendpunkt verlässt, sind die Ergebnisse möglicherweise nicht korrekt. Um dies zu umgehen, sollte die Anwendung manuell eine Liste verwalten. Weitere Informationen finden Sie unter IAudioSessionEnumerator.

Hinweis Stellen Sie sicher, dass die Anwendung com mit MTA-Modell (Multithreaded Apartment) initialisiert, indem sie einen Nicht-UI-Thread aufruft CoInitializeEx(NULL, COINIT_MULTITHREADED) . Wenn MTA nicht initialisiert wird, empfängt die Anwendung keine Sitzungsbenachrichtigungen vom Sitzungs-Manager. Threads, die die Benutzeroberfläche einer Anwendung ausführen, sollten ein initialisiertes Apartmentthreadingmodell sein.
 

Beispiele

Das folgende Codebeispiel zeigt eine Beispielimplementierung der IAudioSessionNotification-Schnittstelle .

class CSessionNotifications: public IAudioSessionNotification
{
private:

    LONG             m_cRefAll;
    HWND m_hwndMain;

    ~CSessionManager(){};

public:


    CSessionManager(HWND hWnd): 
    m_cRefAll(1),
    m_hwndMain (hWnd)

    {}

    // IUnknown
    HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppv)  
    {    
        if (IID_IUnknown == riid)
        {
            AddRef();
            *ppvInterface = (IUnknown*)this;
        }
        else if (__uuidof(IAudioSessionNotification) == riid)
        {
            AddRef();
            *ppvInterface = (IAudioSessionNotification*)this;
        }
        else
        {
            *ppvInterface = NULL;
            return E_NOINTERFACE;
        }
        return S_OK;
    }
    
    ULONG STDMETHODCALLTYPE AddRef()
    {
        return InterlockedIncrement(&m_cRefAll);
    }
     
    ULONG STDMETHODCALLTYPE Release)()
    {
        ULONG ulRef = InterlockedDecrement(&m_cRefAll);
        if (0 == ulRef)
        {
            delete this;
        }
        return ulRef;
    }

    HRESULT OnSessionCreated(IAudioSessionControl *pNewSession)
    {
        if (pNewSession)
        {
            PostMessage(m_hwndMain, WM_SESSION_CREATED, 0, 0);
        }
    }
};

Anforderungen

Anforderung Wert
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

Weitere Informationen

Kern-Audioschnittstellen