FRFAM.COM >> Famille >> Technologie &Innovation >> Informatique

Comment désactiver automatiquement le son lors du débranchement des écouteurs sous Windows

Ne serait-il pas formidable de pouvoir désactiver automatiquement la sortie audio de votre ordinateur chaque fois que vous débranchez vos écouteurs ? Cela éviterait de réveiller accidentellement vos colocataires aux petites heures du matin ou de révéler par erreur votre amour pour Britney Spears en public.

Bien sûr, vous pouvez désactiver les haut-parleurs et les écouteurs au cas par cas à l'aide du mélangeur de volume. (En savoir plus sur la personnalisation du son dans Windows 10.) Mais honnêtement, il n'est pas nécessaire de le faire lorsque vous pouvez l'automatiser avec PowerShell.

Voici comment couper automatiquement le son de votre PC lorsque vous retirez le casque, un peu comme le font les smartphones.

Pour commencer, ouvrez le Bloc-notes. Ensuite, collez le code suivant dans le document vierge :

[cmdletbinding()] 
Param()
#Ajout de définitions pour accéder à l'API Audio
Ajouter-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 souciez
int f(); entier g(); entier h(); int je();
int SetMasterVolumeLevelScalar(float fLevel, System.Guid pguidEventContext);
entier j();
int GetMasterVolumeLevelScalar(out float pfLevel);
entier k(); int l(); entier 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(); // Inutilisé
int GetDefaultAudioEndpoint(int dataFlow, int role, out point de terminaison IMMDevice);
}
[ComImport, Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] classe MMDeviceEnumeratorComObject { }
Audio de classe publique {
statique IAudioEndpointVolumeVol() {
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 {
obtenir {float v =-1 ; Marshal.ThrowExceptionForHR(Vol().GetMasterVolumeLevelScalar(out v)); retourner v ;}
set {Marshal.ThrowExceptionForHR(Vol().SetMasterVolumeLevelScalar(value, System.Guid.Empty));}
}
public statique bool Muet {
obtenir { bool muet ; Marshal.ThrowExceptionForHR(Vol().GetMute(out muet)); retour muet ; }
set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); }
}
}
'@ - Verbeux

Tandis que($true)
{
#Nettoyez tous les événements de la session en cours depuis qu'ils sont dans 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
Registre-WmiEvent -Classe Win32_DeviceChangeEvent
Attente-Event -OutVariable Event |Out-Null
$EventType =$Event.sourceargs.newevent | `
Sort-Object TIME_CREATED -Descending | `
Select-Object EventType -ExpandProperty EventType -First 1
#Logique conditionnelle à gérer, quand couper/réactiver la machine à l'aide de l'API audio
Si($EventType -eq 3)
{
[Audio] ::Muet =$true
Write-Verbose "Muet [$((Get-Date).tostring())]"
}
elseif($EventType -eq 2 -and [Audio]::Mute -eq $true)
{
[Audio] ::Muet =$false
Write-Verbose "UnMuted [$((Get-Date).tostring())]"
}
}

Vous devez maintenant enregistrer le fichier au format PS1. Lorsque vous regardez la boîte de dialogue Enregistrer le fichier, sélectionnez Tous les fichiers dans le menu déroulant et appelez le fichier AutoMute.ps1 . Le nom du fichier lui-même n'est pas important, alors choisissez simplement quelque chose dont vous vous souviendrez facilement.

Pour activer le script, faites un clic droit sur le fichier nouvellement créé et sélectionnez Exécuter . Le script sera actif jusqu'à ce que vous éteigniez votre machine.

Ce n'est qu'une des nombreuses façons dont PowerShell peut augmenter votre productivité. Il existe de nombreuses applets de commande PowerShell qui amélioreront votre expérience Windows.

Crédit image :peus/Depositphotos


[]