Sådan slår du lyden fra automatisk, når hovedtelefoner er frakoblet på Windows 10

Windows 10 kan beholde separate lydprofiler for forskellige lydenheder. For hver lydenhed, du tilslutter, kan du indstille et andet lydstyrkeniveau, og når enheden er tilsluttet, justeres lydstyrken automatisk. Selvfølgelig er der ingen, der holder en lydenhed slået fra hele tiden. De vil øge eller mindske lydstyrken, men ingen plejer at slå lyden fra en lydenhed.

Hvis du bruger et par hovedtelefoner med dit skrivebord, og ofte skal afbryde dem, kan du bruge et lille PowerShell-script, der automatisk slår lyden fra, når du tager dine hovedtelefoner ud.

Det er noget, mobiltelefoner gør, dvs. at når du trækker dine høretelefoner ud, stopper musikken automatisk. Logikken bag dette er, at du enten er færdig med at lytte til musik, eller også har du ved et uheld fjernet dine hovedtelefoner, og du har brug for en hurtig måde at slukke dem på. Manuskriptet blev grundlæggende skrevet efter det samme princip af Prateek Singh fra GEEKEEFY.

  Sådan finder du strømforbrugende apps på Windows 10

Slå automatisk lyd fra

Åbn Notesblok og indsæt følgende;

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

Gem det med PS1 filtypenavnet. Sørg for at vælge ‘Alle filer’ fra rullemenuen filtype. Giv filen et navn, der med et øjeblik fortæller dig, hvad den gør. Gem det et sted, hvor du sandsynligvis ikke vil slette det ved et uheld, men også hvor du nemt kan finde det, hvis du har brug for det.

  Opret og rediger nemt ikoner på Windows med Junior Icon Editor

Kører scriptet

PowerShell kan ikke bare køre et script automatisk. Der er en indbygget sikkerhedsforanstaltning, der forhindrer den i at gøre det, men der er en vej udenom. Vi har en detaljeret artikel om, hvordan du kan gøre netop det. Følg instruktionerne for automatisk at køre det PowerShell-script, du lige har oprettet, og brug en planlagt opgave til at starte scriptet, hver gang du starter din pc.

Alternativt kan du køre scriptet manuelt, når du starter dit system. Jeg har brugt det i mindre end 30 minutter, og jeg ved ikke, hvordan jeg levede uden det før.

  Sådan løses lydproblemer i Windows 10