- - Hoe geluid automatisch te dempen wanneer de hoofdtelefoon niet is aangesloten op Windows 10

Geluid automatisch dempen wanneer de hoofdtelefoon niet is aangesloten op Windows 10

Windows 10 kan afzonderlijke audioprofielen bewaren voorverschillende audio-apparaten. Voor elk audioapparaat dat u aansluit, kunt u een ander volumeniveau instellen en wanneer het apparaat is aangesloten, wordt het volume automatisch aangepast. Natuurlijk houdt niemand een audioapparaat de hele tijd gedempt. Ze zullen het volume verhogen of verlagen, maar gewoonlijk dempt niemand een audioapparaat. Als u een hoofdtelefoon gebruikt met uw bureaublad en deze vaak moet loskoppelen, kunt u een klein PowerShell-script gebruiken dat het geluid automatisch dempt wanneer u uw hoofdtelefoon loskoppelt.

Dit is iets dat mobiele telefoons doen, d.w.z., wanneer u uw hoofdtelefoon loskoppelt, stopt de muziek automatisch. De logica hierachter is dat je klaar bent met luisteren naar muziek of dat je per ongeluk je koptelefoon hebt verwijderd en dat je een snelle manier nodig hebt om deze uit te schakelen. Het script is eigenlijk op hetzelfde principe geschreven door Prateek Singh van GEEKEEFY.

Geluid automatisch dempen

Open Kladblok en plak het volgende;

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

Sla het op met de PS1-bestandsextensie. Zorg ervoor dat u 'Alle bestanden' selecteert in de vervolgkeuzelijst van het bestandstype. Geef het bestand een naam die u in één oogopslag vertelt wat het doet. Bewaar het op een plaats waar het onwaarschijnlijk is dat u het per ongeluk verwijdert, maar ook waar u het gemakkelijk kunt vinden als u dat nodig hebt.

Het script uitvoeren

PowerShell kan niet zomaar een script automatisch uitvoeren. Er is een ingebouwde beveiligingsmaatregel die dit voorkomt, maar er is een manier om dit te omzeilen. We hebben een gedetailleerd artikel over hoe u dat precies kunt doen. Volg de instructies om het PowerShell-script dat u zojuist hebt gemaakt automatisch uit te voeren en gebruik een geplande taak om het script te starten telkens wanneer u uw pc opstart.

Als alternatief kunt u het script handmatig uitvoeren wanneer u uw systeem opstart. Ik gebruik het minder dan 30 minuten en ik weet niet hoe ik vroeger zonder leefde.

Comments