Comment couper automatiquement le son lorsque les écouteurs sont débranchés sous Windows 10

Windows 10 peut conserver des profils audio distincts pour différents périphériques audio. Pour chaque appareil audio que vous connectez, vous pouvez définir un niveau de volume différent et lorsque l’appareil est connecté, le volume s’ajuste automatiquement. Bien sûr, personne ne garde un périphérique 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 coupera automatiquement le son lorsque vous débranchez vos écouteurs.

C’est quelque chose que font les téléphones portables, c’est-à-dire que lorsque vous débranchez vos écouteurs, 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é votre casque et que vous avez besoin d’un moyen rapide de l’éteindre. Le script a été essentiellement écrit sur le même principe par Prateek Singh de GEEKEEFY.

  Comment modifier la façon dont Excel affiche les nombres négatifs

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 en un coup d’œil ce qu’il fait. Enregistrez-le à un endroit où vous ne pourrez probablement pas le supprimer par accident, mais aussi où vous pourrez le trouver facilement si vous en avez besoin.

  Comment identifier une fausse invite de connexion Apple

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 contourner ce problème. Nous avons un article détaillé sur la façon dont vous pouvez faire exactement cela. 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 fois que vous démarrez votre PC.

Vous pouvez également 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 j’en ai vécu avant.

  Comment supprimer les demandes LinkedIn par mot-clé dans Chrome