Come disattivare automaticamente l'audio quando le cuffie sono scollegate su Windows 10

click fraud protection

Windows 10 può mantenere profili audio separati per diversi dispositivi audio. Per ogni dispositivo audio collegato, è possibile impostare un livello di volume diverso e quando il dispositivo è collegato, il volume si regola automaticamente. Ovviamente, nessuno mantiene sempre disattivato l'audio di un dispositivo audio. Aumenteranno o diminuiranno il volume ma nessuno disattiva abitualmente un dispositivo audio.

Se si utilizzano un paio di cuffie con il desktop e spesso è necessario disconnetterle, è possibile utilizzare un piccolo script PowerShell che disattiverà automaticamente l'audio quando si scollegano le cuffie.

Questo è qualcosa che fanno i telefoni cellulari, cioè quando scolleghi le cuffie, la musica si interrompe automaticamente. La logica alla base di ciò è che hai finito di ascoltare la musica o hai rimosso accidentalmente le cuffie e hai bisogno di un modo rapido per spegnerlo. La sceneggiatura è stata sostanzialmente scritta sullo stesso principio da Prateek Singh di GEEKEEFY.

instagram viewer

Disattiva automaticamente l'audio

Apri Blocco note e incolla quanto segue;

[CmdletBinding ()] Param () # Aggiunta di definizioni per l'accesso all'API audio. Add-Type -TypeDefinition @ ' utilizzando il sistema. Runtime. InteropServices; [Guid ("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] interfaccia IAudioEndpointVolume { // f (), g (),... sono slot del metodo COM non utilizzati. Definiscili se ti interessa. 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, Sistema. Guid pguidEventContext); int GetMute (out bool pbMute); } [Guid ("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] interfaccia IMMDevice { int Attiva (ref System. Guid id, int clsCtx, int ActivParams, out IAudioEndpointVolume aev); } [Guid ("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] interfaccia IMMDeviceEnumerator { int f (); // Non utilizzato. int GetDefaultAudioEndpoint (int dataFlow, int role, out IMMDevice endpoint); } [ComImport, Guid ("BCDE0395-E52F-467C-8E3D-C4579291692E")] classe MMDeviceEnumeratorComObject {} public class Audio { static IAudioEndpointVolume Vol () { var enumerator = new MMDeviceEnumeratorComObject () come IMMDeviceEnumerator; IMMDevice dev = null; Maresciallo. ThrowExceptionForHR (enumerator. GetDefaultAudioEndpoint (/ * eRender * / 0, / * eMultimedia * / 1, out dev)); IAudioEndpointVolume epv = null; var epvid = typeof (IAudioEndpointVolume) .GUID; Maresciallo. ThrowExceptionForHR (dev. Attiva (ref epvid, / * CLSCTX_ALL * / 23, 0, out epv)); ritorno epv; } float statico pubblico Volume { get {float v = -1; Maresciallo. ThrowExceptionForHR (Vol (). GetMasterVolumeLevelScalar (out v)); return v;} set {Maresciallo. ThrowExceptionForHR (Vol (). SetMasterVolumeLevelScalar (valore, Sistema. GUID. Vuoto));} } public static bool Mute { get {bool mute; Maresciallo. ThrowExceptionForHR (Vol (). GetMute (out mute)); muto di ritorno; } set {Maresciallo. ThrowExceptionForHR (Vol (). SetMute (value, System. GUID. Vuoto)); } } } '@ -Verbose While ($ true) { # Pulisci tutti gli eventi nella sessione corrente poiché si trova in un ciclo infinito, per ricominciare da capo all'inizio del ciclo. Get-Event | Remove-Event -ErrorAction SilentlyContinue #Registrazione dell'evento e in attesa dell'attivazione dell'evento. Register-WmiEvent -Class Win32_DeviceChangeEvent. Wait-Event -OutVariable Event | Out-Null $ EventType = $ Event.sourceargs.newevent | ` Ordinamento-oggetto TIME_CREATED -Descending | ` Select-Object EventType -ExpandProperty EventType -First 1 # Logica condizionale da gestire, Quando attivare / disattivare l'audio della macchina tramite API audio. If ($ EventType -eq 3) { [Audio]:: Mute = $ true. Write-Verbose "Disattivato [$ ((Get-Date) .tostring ())]" } elseif ($ EventType -eq 2 -e [Audio]:: Mute -eq $ true) { [Audio]:: Mute = $ false. Write-Verbose "UnMuted [$ ((Get-Date) .tostring ())]" } }

Salvalo con l'estensione del file PS1. Assicurati di selezionare "Tutti i file" dal menu a discesa del tipo di file. Dai al file un nome che ti dirà a colpo d'occhio cosa fa. Salvalo in un punto in cui è improbabile che lo elimini per sbaglio, ma anche dove puoi trovarlo facilmente se necessario.

Esecuzione dello script

PowerShell non può semplicemente eseguire l'esecuzione automatica di uno script. C'è una misura di sicurezza integrata che gli impedisce di farlo, ma c'è un modo per aggirarlo. Abbiamo un articolo dettagliato su come puoi fare proprio questo. Seguire le istruzioni per esegue automaticamente lo script di PowerShell appena creato e utilizzare un'attività pianificata per avviare lo script ogni volta che si avvia il PC.

In alternativa, è possibile eseguire manualmente lo script all'avvio del sistema. Lo uso da meno di 30 minuti e non so come avrei vissuto senza di esso prima.

watch instagram story