internal AudioPolicyConfigFactoryImplForDownlevel()
        {
            var iid = typeof(IAudioPolicyConfigFactoryDownlevel).GUID;

            Combase.RoGetActivationFactory("Windows.Media.Internal.AudioPolicyConfig", ref iid, out object factory);
            _factory = (IAudioPolicyConfigFactoryDownlevel)factory;
        }
        public static IAudioPolicyConfigFactory Create()
        {
            var iid = typeof(IAudioPolicyConfigFactory).GUID;

            Combase.RoGetActivationFactory("Windows.Media.Internal.AudioPolicyConfig", ref iid, out object factory);
            return((IAudioPolicyConfigFactory)factory);
        }
Esempio n. 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AudioPolicyConfigFactory21H2"/> class.
        /// </summary>
        public AudioPolicyConfigFactory21H2()
        {
            var iid = typeof(IAudioPolicyConfigFactory21H2).GUID;

            Combase.RoGetActivationFactory("Windows.Media.Internal.AudioPolicyConfig", ref iid, out object factory);
            this.Factory = (IAudioPolicyConfigFactory21H2)factory;
        }
Esempio n. 4
0
 private static void EnsurePolicyConfig()
 {
     if (s_sharedPolicyConfig == null)
     {
         Guid iid = typeof(IAudioPolicyConfigFactory).GUID;
         Combase.RoGetActivationFactory("Windows.Media.Internal.AudioPolicyConfig", ref iid, out object factory);
         s_sharedPolicyConfig = (IAudioPolicyConfigFactory)factory;
     }
 }
Esempio n. 5
0
        /// <summary>
        /// Sets the default audio device for the specified process.
        /// </summary>
        /// <param name="processName">The process name.</param>
        /// <param name="audioFlow">The audio flow; either input or output.</param>
        /// <param name="deviceId">The device identifier.</param>
        public void SetDefaultAudioDevice(string processName, AudioFlowType audioFlow, string deviceId)
        {
            var flow = this.GetDataFlow(audioFlow);

            if (this.TryGetAudioSessionProcessId(processName, flow, out var audioSessionProcessId))
            {
                // Default to zero pointer; this will only change if an audio device has been specified.
                var hstring = IntPtr.Zero;
                if (!AudioDevices.Current.IsDefaultPlaybackDevice(deviceId))
                {
                    using (var device = AudioDevices.Current.GetDevice(deviceId))
                    {
                        var persistDeviceId = this.GenerateDeviceId(device.ID);
                        Combase.WindowsCreateString(persistDeviceId, (uint)persistDeviceId.Length, out hstring);
                    }
                }

                // Set the audio device for the process.
                this.AudioPolicyConfig.SetPersistedDefaultAudioEndpoint(audioSessionProcessId, flow, Role.Multimedia, hstring);
                this.AudioPolicyConfig.SetPersistedDefaultAudioEndpoint(audioSessionProcessId, flow, Role.Console, hstring);
            }
        }
Esempio n. 6
0
        public static void SetDefaultEndPoint(string deviceId, int processId)
        {
            Trace.WriteLine($"AudioPolicyConfigService SetDefaultEndPoint {deviceId} {processId}");
            try
            {
                EnsurePolicyConfig();

                IntPtr hstring = IntPtr.Zero;

                if (!string.IsNullOrWhiteSpace(deviceId))
                {
                    var str = GenerateDeviceId(deviceId);
                    Combase.WindowsCreateString(str, (uint)str.Length, out hstring);
                }

                s_sharedPolicyConfig.SetPersistedDefaultAudioEndpoint((uint)processId, EDataFlow.eRender, ERole.eMultimedia, hstring);
                s_sharedPolicyConfig.SetPersistedDefaultAudioEndpoint((uint)processId, EDataFlow.eRender, ERole.eConsole, hstring);
            }
            catch (Exception ex)
            {
                AppTrace.LogWarning(ex);
            }
        }
Esempio n. 7
0
        /// <inheritdoc/>
        public void SetDefaultAudioDevice(IProcessSelectionCriteria criteria, string deviceKey)
        {
            var dataFlow  = this.GetDataFlow(deviceKey);
            var predicate = criteria.ToPredicate();

            foreach (var audioSession in this.GetAudioSessions().Where(predicate.IsMatch))
            {
                // Default to zero pointer; this will only change if an audio device has been specified.
                var hstring = IntPtr.Zero;
                var device  = AudioDevices.Current.GetDeviceByKey(deviceKey);
                if (!device.IsDynamic)
                {
                    var persistDeviceId = this.GenerateDeviceId(device.Id, dataFlow);
                    Combase.WindowsCreateString(persistDeviceId, (uint)persistDeviceId.Length, out hstring);
                }

                // Set the audio device for the process.
                var audioSessionProcessId = audioSession.GetProcessID;
                this.AudioPolicyConfig.SetPersistedDefaultAudioEndpoint(audioSessionProcessId, dataFlow, Role.Console, hstring);
                this.AudioPolicyConfig.SetPersistedDefaultAudioEndpoint(audioSessionProcessId, dataFlow, Role.Multimedia, hstring);
                this.AudioPolicyConfig.SetPersistedDefaultAudioEndpoint(audioSessionProcessId, dataFlow, Role.Communications, hstring);
            }
        }
Esempio n. 8
0
        public void SetDefaultEndPoint(string deviceId, int processId)
        {
            Console.WriteLine($"AudioPolicyConfigService SetDefaultEndPoint {deviceId} {processId}");
            try
            {
                EnsurePolicyConfig();

                var hstring = IntPtr.Zero;

                if (!string.IsNullOrWhiteSpace(deviceId))
                {
                    var str = GenerateDeviceId(deviceId);
                    Combase.WindowsCreateString(str, (uint)str.Length, out hstring);
                }

                _sharedPolicyConfig.SetPersistedDefaultAudioEndpoint((uint)processId, _flow, Role.Multimedia,
                                                                     hstring);
                _sharedPolicyConfig.SetPersistedDefaultAudioEndpoint((uint)processId, _flow, Role.Console, hstring);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{ex}");
            }
        }