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.
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 |