void VolumeManager_NewSession(VolumeSession rpSession)
        {
            var rHostProcessID = Process.GetCurrentProcess().Id;
            int? rProcessID = rpSession.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 e) when (e.ErrorCode == ManagementStatus.NotFound)
                    {
                        rProcessID = null;
                    }

            if (!rIsBrowserProcess)
                return;

            Volume?.Dispose();
            Volume = new BrowserVolume(rpSession);

            VolumeManager.Instance.NewSession -= VolumeManager_NewSession;
        }
        public BrowserVolume(VolumeSession rpSession)
        {
            r_Session = rpSession;

            r_IsMute = r_Session.IsMute;
            r_Volume = r_Session.Volume;

            r_Session.VolumeChanged += r =>
            {
                r_IsMute = r.IsMute;
                r_Volume = r.Volume;

                OnPropertyChanged(nameof(IsMute));
                OnPropertyChanged(nameof(Volume));
            };
        }
 public void Dispose()
 {
     r_Session.Dispose();
     r_Session = null;
 }