- - Hur du stänger av ljudet automatiskt när hörlurarna kopplas från i Windows 10

Så här stänger du automatiskt av ljudet när hörlurarna är anslutna till Windows 10

Windows 10 kan behålla separata ljudprofiler förolika ljudenheter. För varje ljudenhet som du ansluter kan du ställa in en annan volymnivå och när enheten är ansluten kommer volymen att justeras automatiskt. Naturligtvis håller ingen en ljudenhet stängd hela tiden. De kommer att öka eller minska volymen, men ingen dämpar vanligtvis en ljudenhet. Om du använder ett par hörlurar på skrivbordet och ofta måste koppla bort dem kan du använda ett litet PowerShell-skript som automatiskt stänger av ljudet när du kopplar ur hörlurarna.

Detta är något som mobiltelefoner gör, dvs., när du kopplar ur hörlurarna stannar musiken automatiskt. Logiken bakom detta är att du antingen har lyssnat på musik eller att du av misstag har tagit bort hörlurarna och att du behöver ett snabbt sätt att stänga av den. Manuset var i princip skrivet på samma princip av Prateek Singh från GEEKEEFY.

Stäng av ljudet automatiskt

Öppna Anteckningar och klistra in följande;

[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())]"
}
}

Spara det med PS1-filändelsen. Se till att du väljer "Alla filer" i rullgardinsmenyn för filtyp. Ge filen ett namn som snabbt kan berätta vad den gör. Spara det någonstans som det inte är troligt att du tar bort det av misstag men också där du enkelt hittar det om du behöver.

Kör manuset

PowerShell kan inte bara autorisera ett skript. Det finns en inbyggd säkerhetsåtgärd som hindrar det från att göra det men det finns en väg runt det. Vi har en detaljerad artikel om hur du kan göra just det. Följ instruktionerna för att automatiskt köra PowerShell-skriptet som du just skapade och använd en schemalagd uppgift för att starta skriptet varje gång du startar datorn.

Alternativt kan du köra skriptet manuellt när du startar upp ditt system. Jag har använt det i mindre än 30 minuter och jag vet inte hur jag levde utan det förut.

kommentarer