Windows 10 peut conserver des profils audio séparés pour différents appareils 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'ajustera 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 le son d'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ébrancherez 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 ce même principe par Prateek Singh de GEEKEEFY .

Couper automatiquement le son
Ouvrez le Bloc-notes et collez ce qui suit ;
[cmdletbinding()] Param() #Ajout de définitions pour accéder à l'API audio Add-Type -TypeDefinition @' en utilisant System.Runtime.InteropServices ; [Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IAudioEndpointVolume { // f(), g(), ... sont des emplacements de méthode COM inutilisés. Définissez-les si vous vous en souciez int f(); int g(); entier h(); entier i(); int SetMasterVolumeLevelScalar(float fLevel, System.Guid pguidEventContext); int j(); int GetMasterVolumeLevelScalar(out float pfLevel); entier k(); int l(); int m(); entier 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)); retour 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(sortie muet)); retour muet; } set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); } } } '@ -Verbose While($true) { #Nettoyer tous les événements de la session en cours car il s'agit d'une boucle infinie, pour prendre un nouveau départ lorsque la boucle commence Get-Event | Remove-Event -ErrorAction SilentlyContinue #Enregistrement de l'événement et attente du déclenchement de l'événement Register-WmiEvent -Class Win32_DeviceChangeEvent Wait-Event -OutVariable Event |Out-Null $EventType = $Event.sourceargs. nouveauté | ` Objet de tri TIME_CREATED -Décroissant | ` Select-Object EventType -ExpandProperty EventType -First 1 #Logique conditionnelle à gérer, Quand couper/rétablir le son de la machine à l'aide de l'API audio If($EventType -eq 3) { [Audio]::Mute = $true Write-Verbose "Muet [$((Get-Date).tostring())]" } elseif($EventType -eq 2 -and [Audio]::Mute -eq $true) { [Audio]::Mute = $false Write-Verbose " Non muet [$((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 dans un endroit où il est peu probable que vous le supprimiez par accident, mais aussi où vous pourrez 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 le 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 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 je vivais sans avant.