Windows 10 peut conserver des profils audio distincts pourdifférents appareils audio. Pour chaque périphérique audio que vous connectez, vous pouvez définir un niveau de volume différent et lorsque le périphérique est connecté, le volume s'ajuste automatiquement. Bien sûr, personne ne garde un appareil audio en sourdine tout le temps. Ils augmenteront ou diminueront le volume mais personne ne coupe habituellement un appareil audio. Si vous utilisez une paire d'écouteurs avec votre bureau et que vous devez souvent les déconnecter, vous pouvez utiliser un petit script PowerShell qui coupe automatiquement le son lorsque vous débranchez votre casque.
C'est quelque chose que font les téléphones mobiles, c'est-à-dire, lorsque vous débranchez votre casque, la musique s'arrête automatiquement. La logique derrière cela est que vous avez fini d'écouter de la musique ou que vous avez accidentellement retiré vos écouteurs et que vous avez besoin d'un moyen rapide de le désactiver. Le script a été essentiellement écrit sur ce même principe par Prateek Singh de GEEKEEFY.

Couper automatiquement le son
Ouvrez le Bloc-notes et collez ce qui suit;
[cmdletbinding()] Param() #Adding definitions for accessing the Audio API Add-Type -TypeDefinition @" using System.Runtime.InteropServices; [Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IAudioEndpointVolume { // f(), g(), ... are unused COM method slots. Define these if you care int f(); int g(); int h(); int i(); int SetMasterVolumeLevelScalar(float fLevel, System.Guid pguidEventContext); int j(); int GetMasterVolumeLevelScalar(out float pfLevel); int k(); int l(); int m(); int n(); int SetMute([MarshalAs(UnmanagedType.Bool)] bool bMute, System.Guid pguidEventContext); int GetMute(out bool pbMute); } [Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IMMDevice { int Activate(ref System.Guid id, int clsCtx, int activationParams, out IAudioEndpointVolume aev); } [Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IMMDeviceEnumerator { int f(); // Unused int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice endpoint); } [ComImport, Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] class MMDeviceEnumeratorComObject { } public class Audio { static IAudioEndpointVolume Vol() { var enumerator = new MMDeviceEnumeratorComObject() as IMMDeviceEnumerator; IMMDevice dev = null; Marshal.ThrowExceptionForHR(enumerator.GetDefaultAudioEndpoint(/*eRender*/ 0, /*eMultimedia*/ 1, out dev)); IAudioEndpointVolume epv = null; var epvid = typeof(IAudioEndpointVolume).GUID; Marshal.ThrowExceptionForHR(dev.Activate(ref epvid, /*CLSCTX_ALL*/ 23, 0, out epv)); return epv; } public static float Volume { get {float v = -1; Marshal.ThrowExceptionForHR(Vol().GetMasterVolumeLevelScalar(out v)); return v;} set {Marshal.ThrowExceptionForHR(Vol().SetMasterVolumeLevelScalar(value, System.Guid.Empty));} } public static bool Mute { get { bool mute; Marshal.ThrowExceptionForHR(Vol().GetMute(out mute)); return mute; } set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); } } } "@ -Verbose While($true) { #Clean all events in the current session since its in a infinite loop, to make a fresh start when loop begins Get-Event | Remove-Event -ErrorAction SilentlyContinue #Registering the Event and Waiting for event to be triggered Register-WmiEvent -Class Win32_DeviceChangeEvent Wait-Event -OutVariable Event |Out-Null $EventType = $Event.sourceargs.newevent | ` Sort-Object TIME_CREATED -Descending | ` Select-Object EventType -ExpandProperty EventType -First 1 #Conditional logic to handle, When to Mute/unMute the machine using Audio API If($EventType -eq 3) { [Audio]::Mute = $true Write-Verbose "Muted [$((Get-Date).tostring())]" } elseif($EventType -eq 2 -and [Audio]::Mute -eq $true) { [Audio]::Mute = $false Write-Verbose "UnMuted [$((Get-Date).tostring())]" } }
Enregistrez-le avec l'extension de fichier PS1. Assurez-vous de sélectionner "Tous les fichiers" dans la liste déroulante des types de fichiers. Donnez au fichier un nom qui vous dira d'un coup d'œil ce qu'il fait. Enregistrez-le dans un endroit où vous ne risquez pas de le supprimer par accident, mais aussi où vous pouvez le trouver facilement si vous en avez besoin.
Exécution du script
PowerShell ne peut pas simplement exécuter automatiquement un script. Il existe une mesure de sécurité intégrée qui l'empêche de le faire, mais il existe un moyen de la contourner. Nous avons un article détaillé sur la façon dont vous pouvez le faire. Suivez les instructions pour exécuter automatiquement le script PowerShell que vous venez de créer et utilisez une tâche planifiée pour démarrer le script à chaque démarrage de votre PC.
Alternativement, vous pouvez exécuter manuellement le script lorsque vous démarrez votre système. Je l'utilise depuis moins de 30 minutes et je ne sais pas comment je vivais sans auparavant.
commentaires