Windows 10 kan opbevare separate lydprofiler tilforskellige lydenheder. For hver lydenhed, du tilslutter, kan du indstille et andet lydstyrkeniveau, og når enheden er tilsluttet, justeres lydstyrken automatisk. Naturligvis holder ingen en lydenhed tændt hele tiden. De øger eller mindsker lydstyrken, men ingen demper sædvanligvis en lydenhed. Hvis du bruger et par hovedtelefoner på dit skrivebord og ofte skal frakoble dem, kan du bruge et lille PowerShell-script, der automatisk vil slå lyd fra, når du tager stikket ud af hovedtelefonerne.
Dette er noget, mobiltelefoner gør, dvs., når du frakobler hovedtelefonerne, stopper musikken automatisk. Logikken bag dette er, at du enten er færdig med at lytte til musik, eller at du ved et uheld har fjernet dine hovedtelefoner, og at du har brug for en hurtig måde at slå den fra. Manuskriptet blev dybest set skrevet på samme princip af Prateek Singh fra GEEKEEFY.

Dæmp lyd automatisk
Åbn Notepad, 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 du vælger 'Alle filer' i rullemenuen filtype. Giv filen et navn, der med et øjeblik fortæller dig, hvad den gør. Gem det et sted, hvor det ikke er sandsynligt, at du sletter det ved et tilfælde, men også hvor du let kan finde det, hvis du har brug for det.
Kører manuskriptet
PowerShell kan ikke kun autorisere et script. Der er en indbygget sikkerhedsforanstaltning, der forhindrer det i at gøre det, men der er en vej omkring det. Vi har en detaljeret artikel om, hvordan du kan gøre netop det. Følg instruktionerne for automatisk at køre PowerShell-scriptet, du lige har oprettet, og brug en planlagt opgave til at starte scriptet, hver gang du starter din pc.
Alternativt kan du manuelt køre scriptet, 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.
Kommentarer