So schalten Sie den Ton automatisch stumm, wenn die Kopfhörer unter Windows 10 abgezogen werden

Windows 10 kann separate Audioprofile für verschiedene Audiogeräte führen. Sie können für jedes angeschlossene Audiogerät eine andere Lautstärke einstellen, und wenn das Gerät verbunden ist, passt sich die Lautstärke automatisch an. Natürlich hält niemand ein Audiogerät die ganze Zeit stumm. Sie erhöhen oder verringern die Lautstärke, aber niemand schaltet normalerweise ein Audiogerät stumm.

Wenn Sie Kopfhörer mit Ihrem Desktop verwenden und diese häufig trennen müssen, können Sie ein kleines PowerShell-Skript verwenden, das den Ton automatisch stumm schaltet, wenn Sie Ihre Kopfhörer abziehen.

Dies ist etwas, was Mobiltelefone tun, dh wenn Sie Ihre Kopfhörer abziehen, stoppt die Musik automatisch. Die Logik dahinter ist, dass Sie entweder mit dem Musikhören fertig sind oder versehentlich Ihre Kopfhörer entfernt haben und eine schnelle Möglichkeit benötigen, sie auszuschalten. Das Drehbuch wurde im Grunde nach dem gleichen Prinzip von geschrieben Prateek Singh von GEEKEEFY.

Ton automatisch stumm schalten

Öffnen Sie Notepad und fügen Sie Folgendes ein;

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

Speichern Sie es mit der PS1-Dateierweiterung. Stellen Sie sicher, dass Sie „Alle Dateien“ aus dem Dateityp-Dropdown auswählen. Geben Sie der Datei einen Namen, der Ihnen auf einen Blick verrät, was sie tut. Speichern Sie es an einem Ort, an dem Sie es wahrscheinlich nicht versehentlich löschen, aber auch dort, wo Sie es bei Bedarf leicht finden können.

Ausführen des Skripts

PowerShell kann ein Skript nicht einfach automatisch ausführen. Es gibt eine eingebaute Sicherheitsmaßnahme, die dies verhindert, aber es gibt einen Weg, sie zu umgehen. Wir haben einen ausführlichen Artikel darüber, wie Sie genau das tun können. Befolgen Sie die Anweisungen, um das soeben erstellte PowerShell-Skript automatisch auszuführen, und verwenden Sie eine geplante Aufgabe, um das Skript jedes Mal zu starten, wenn Sie Ihren PC starten.

Alternativ können Sie das Skript manuell ausführen, wenn Sie Ihr System booten. Ich benutze es seit weniger als 30 Minuten und weiß nicht, wie ich vorher ohne es gelebt habe.