public static IList <AudioSession> GetAllSessions() { List <AudioSession> list = new List <AudioSession>(); Interfaces.IAudioSessionManager2 mgr = GetAudioSessionManager(); if (mgr == null) { return(list); } Interfaces.IAudioSessionEnumerator sessionEnumerator; mgr.GetSessionEnumerator(out sessionEnumerator); int count; sessionEnumerator.GetCount(out count); for (int i = 0; i < count; i++) { Interfaces.IAudioSessionControl2 ctl2; sessionEnumerator.GetSession(i, out ctl2); if (ctl2 != null) { list.Add(new AudioSession(ctl2)); } } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); return(list); }
private static Interfaces.ISimpleAudioVolume GetSystemSoundsVolumeObject() { Interfaces.IMMDeviceEnumerator deviceEnumerator = null; Interfaces.IAudioSessionEnumerator sessionEnumerator = null; Interfaces.IAudioSessionManager2 mgr = null; Interfaces.IMMDevice speakers = null; try { // get the speakers (1st render + multimedia) device deviceEnumerator = (Interfaces.IMMDeviceEnumerator)(new Interfaces.MMDeviceEnumerator()); deviceEnumerator.GetDefaultAudioEndpoint(Interfaces.EDataFlow.eRender, Interfaces.ERole.eMultimedia, out speakers); // activate the session manager. we need the enumerator Guid IID_IAudioSessionManager2 = typeof(Interfaces.IAudioSessionManager2).GUID; object o; speakers.Activate(IID_IAudioSessionManager2, 0, IntPtr.Zero, out o); mgr = (Interfaces.IAudioSessionManager2)o; // enumerate sessions for on this device mgr.GetSessionEnumerator(out sessionEnumerator); int count; sessionEnumerator.GetCount(out count); // search for an audio session with the required process-id Interfaces.ISimpleAudioVolume volumeControl = null; for (int i = 0; i < count; ++i) { Interfaces.IAudioSessionControl2 ctl = null; try { sessionEnumerator.GetSession(i, out ctl); ctl.GetDisplayName(out string val); if (val.ToLower().Contains("@%systemroot%\\system32\\audiosrv.dll")) { volumeControl = ctl as Interfaces.ISimpleAudioVolume; break; } } finally { } } return(volumeControl); } finally { if (sessionEnumerator != null) { Marshal.ReleaseComObject(sessionEnumerator); } if (mgr != null) { Marshal.ReleaseComObject(mgr); } if (speakers != null) { Marshal.ReleaseComObject(speakers); } if (deviceEnumerator != null) { Marshal.ReleaseComObject(deviceEnumerator); } } }