void AudioManager_NewSession(object sender, AudioSessionCreatedEventArgs e) { if (e.Session.IsSystemSoundsSession) { return; } var rHostProcessID = Process.GetCurrentProcess().Id; int?rProcessID = e.Session.ProcessID; var rIsBrowserProcess = false; while (rProcessID.HasValue) { using (var rManagementObject = new ManagementObject($"Win32_Process.Handle='{rProcessID.Value}'")) try { rManagementObject.Get(); rProcessID = Convert.ToInt32(rManagementObject["ParentProcessId"]); if (rProcessID == rHostProcessID) { rIsBrowserProcess = true; break; } } catch (ManagementException rException) when(rException.ErrorCode == ManagementStatus.NotFound) { rProcessID = null; } } if (!rIsBrowserProcess) { return; } e.Release = false; AudioSession?.Dispose(); AudioSession = new BrowserAudioSession(e.Session); AudioManager.Instance.NewSession -= AudioManager_NewSession; AudioManager.Instance.StopSessionNotification(); }
void AudioManager_NewSession(AudioSessionCreatedEventArgs e) { if (e.Session.IsSystemSoundsSession || !IsDescendantOfHost(e.Session.ProcessID)) return; e.Release = false; AudioSession?.Dispose(); AudioSession = new BrowserAudioSession(e.Session); AudioManager.NewSession -= AudioManager_NewSession; AudioManager.StopSessionNotification(); }