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); }
/// <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; }
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; } }
/// <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); } }
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); } }
/// <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); } }
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}"); } }