So schalten Sie den Ton automatisch aus, wenn Sie in Windows Kopfhörer ausstecken

Wäre es nicht großartig, wenn Sie Ihren Computer jedes Mal automatisch stumm schalten könnten, wenn Sie Ihren Kopfhörer ausstecken? Dies würde vermeiden, Ihre Mitbewohner versehentlich in den frühen Morgenstunden zu wecken oder Ihre Liebe zu Britney Spears fälschlicherweise in der Öffentlichkeit zu offenbaren.

Natürlich können Sie die Lautsprecher und Kopfhörer mit dem Lautstärkemixer von Fall zu Fall stumm schalten. (Lesen Sie mehr über das Anpassen von Sound in Windows 10.) Aber ehrlich gesagt müssen Sie dies nicht tun, wenn Sie es mit PowerShell automatisieren können.

So schalten Sie Ihren PC automatisch aus, wenn Sie die Kopfhörer entfernen, genau wie bei Smartphones.

Öffnen Sie zunächst den Editor. Fügen Sie dann den folgenden Code in das leere Dokument 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())]"
}
}

Jetzt müssen Sie die Datei im PS1-Format speichern. Wählen Sie beim Anzeigen des Dialogfelds Datei speichern die Option aus Alle Dateien im Dropdown-Menü und rufen Sie die Datei auf AutoMute.ps1. Der Name der Datei selbst ist nicht wichtig, wählen Sie also einfach etwas, an das Sie sich leicht erinnern können.

Um das Skript zu aktivieren, klicken Sie mit der rechten Maustaste auf die neu erstellte Datei und wählen Sie Lauf. Das Skript bleibt aktiv, bis Sie Ihren Computer herunterfahren.

verbunden :  So lassen Sie #hashtags für Ihre Marke funktionieren

Dies ist nur eine der vielen Möglichkeiten, mit denen PowerShell Ihre Produktivität steigern kann. Es gibt viele PowerShell-Cmdlets, die Ihre Windows-Erfahrung verbessern.

Bildnachweis: peus / Depositphotos

Moyens Staff
Moyens I/O-Personal. motivierte Sie und gab Ratschläge zu Technologie, persönlicher Entwicklung, Lebensstil und Strategien, die Ihnen helfen werden.