- - So schalten Sie den Ton unter Windows 10 automatisch stumm, wenn die Kopfhörer ausgesteckt sind

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

Windows 10 kann separate Audioprofile für verwaltenverschiedene Audiogeräte. Für jedes Audiogerät, das Sie anschließen, können Sie einen anderen Lautstärkepegel einstellen. Wenn das Gerät angeschlossen ist, wird die Lautstärke automatisch angepasst. Natürlich hält niemand ein Audiogerät die ganze Zeit stumm. Sie erhöhen oder verringern die Lautstärke, aber niemand schaltet ein Audiogerät gewöhnlich 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 stummschaltet, wenn Sie die Kopfhörer ausstecken.

Dies ist etwas, was Mobiltelefone tun, d.h.Wenn Sie den Kopfhörer ausstecken, stoppt die Musik automatisch. Die Logik dahinter ist, dass Sie entweder keine Musik mehr hören oder versehentlich Ihren Kopfhörer entfernt haben und eine schnelle Möglichkeit zum Ausschalten benötigen. Das Drehbuch wurde im Wesentlichen nach dem gleichen Prinzip von Prateek Singh von GEEKEEFY geschrieben.

Ton automatisch stumm schalten

Öffnen Sie den Editor 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 Dateierweiterung PS1. Stellen Sie sicher, dass Sie in der Dropdown-Liste "Dateityp" die Option "Alle Dateien" auswählen. Geben Sie der Datei einen Namen, der Ihnen auf einen Blick sagt, was sie tut. Speichern Sie es an einem Ort, an dem Sie es wahrscheinlich nicht versehentlich löschen werden, sondern auch an einem Ort, an dem Sie es bei Bedarf leicht finden können.

Ausführen des Skripts

PowerShell kann ein Skript nicht einfach automatisch ausführen. Es gibt eine integrierte Sicherheitsmaßnahme, die dies verhindert, aber es gibt einen Ausweg. 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 Task, 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 starten. Ich benutze es seit weniger als 30 Minuten und weiß nicht, wie ich vorher ohne es gelebt habe.

Bemerkungen