Annons

Skulle det inte vara bra om du automatiskt kan stänga av datorns ljudutgång när du kopplar ur hörlurarna? Det skulle förhindra att du av misstag vaknar dina lägenheter under de små timmarna på morgonen, eller felaktigt avslöjar din kärlek till Britney Spears offentligt.

Naturligtvis kan du stänga av högtalare och hörlurar från fall till fall med Volymblandaren. (Läs mer om anpassning av ljud i Windows 10.) Men ärligt talat, det finns inget behov av att göra det när du kan automatisera det med PowerShell.

Så här stänger du automatiskt av datorns ljud när du tar bort hörlurarna, precis som smartphones gör.

För att komma igång öppnar du Anteckningar. Klistra in följande kod i det tomma dokumentet:

[Cmdletbinding ()] Param () # Lägga till definitioner för åtkomst till Audio API. Add-Type -TypeDefinition @ ' använder System. Körning. InteropServices; [Guid ("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] gränssnitt IAudioEndpointVolume { // f (), g (),... är oanvända COM-metodluckor. Definiera dessa om du bryr dig. int f (); int g (); int h (); int i (); int SetMasterVolumeLevelScalar (float fLevel, System. Guidad pguidEventContext); int j (); int GetMasterVolumeLevelScalar (ut float pfLevel); int k (); int l (); int m (); int n (); int SetMute ([MarshalAs (UnmanagedType. Bool)] bool bMute, System. Guidad pguidEventContext); int GetMute (ut bool pbMute); } [Guid ("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] gränssnitt IMMDevice { int Aktivera (ref System. Guid id, int clsCtx, int aktiveringParams, out IAudioEndpointVolume aev); } [Guid ("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] gränssnitt IMMDeviceEnumerator { int f (); // oanvänd. int GetDefaultAudioEndpoint (int dataFlow, int-roll, out IMMDevice endpoint); } [ComImport, Guid ("BCDE0395-E52F-467C-8E3D-C4579291692E")] klass MMDeviceEnumeratorComObject {} offentlig klassljud { statisk IAudioEndpointVolume Vol () { var enumerator = new MMDeviceEnumeratorComObject () som IMMDeviceEnumerator; IMMDevice dev = null; Marskalk. ThrowExceptionForHR (enumerator. GetDefaultAudioEndpoint (/ * eRender * / 0, / * eMultimedia * / 1, out dev)); IAudioEndpointVolume epv = null; var epvid = typeof (IAudioEndpointVolume) .GUID; Marskalk. ThrowExceptionForHR (dev. Aktivera (ref epvid, / * CLSCTX_ALL * / 23, 0, out epv)); return epv; } public static float Volym { få {float v = -1; Marskalk. ThrowExceptionForHR (Vol (). GetMasterVolumeLevelScalar (out v)); return v;} set {Marshal. ThrowExceptionForHR (Vol (). SetMasterVolumeLevelScalar (värde, system. Guid. Tömma));} } public static bool Mute { få {bool mute; Marskalk. ThrowExceptionForHR (Vol (). GetMute (out mute)); tillbaka stum; } set {Marshal. ThrowExceptionForHR (Vol (). SetMute (värde, system. Guid. Tömma)); } } } '@ -Verbose While ($ true) { # Rensa alla händelser i den aktuella sessionen sedan dess i en oändlig slinga, för att göra en ny start när slingan börjar. Get-Event | Ta bort-Event -ErrorAction Silently Fortsätt # Registrera händelsen och vänta på att händelsen ska utlösas. 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 # Villkorlig logik att hantera, När du vill stänga av / avstänga maskinen med Audio API. If ($ EventType -ekv 3) { [Audio]:: Mute = $ true. Skriv-verbos "Dämpad [$ ((Get-Date) .tostring ())]" } elseif ($ EventType -eq 2 -och [Audio]:: Mute -eq $ true) { [Audio]:: Mute = $ falsk. Skriv-verbos "UnMuted [$ ((Get-Date) .tostring ())]" } }
instagram viewer

Nu måste du spara filen i PS1-format. När du tittar på dialogrutan Spara fil väljer du Alla filer från rullgardinsmenyn och ring filen AutoMute.ps1. Filens namn är inte viktigt, så välj bara något som är lätt att komma ihåg.

För att aktivera skriptet, högerklicka på den nyligen skapade filen och välj Springa. Skriptet är aktivt tills du stänger av maskinen.

Detta är bara ett av många sätt PowerShell kan öka din produktivitet Öka din produktivitet med Windows PowerShell-skriptVad händer om du skulle kunna överföra Linux-produktiviteten till Windows? De flesta Linuxdistros levereras med det kraftfulla Bash-skalet. PowerShell är en lika kraftfull terminal för Windows. Läs mer . Det finns många PowerShell-cmdlets som kommer att förbättra din Windows-upplevelse Powershell Cmdlets som förbättrar dina Windows Admin-färdigheterPowershell är lika delar kommandoradsverktyg och skriptspråk. Det ger dig möjligheten att automatisera din dator med samma kommandon som du använder för att administrera den. Läs mer .

Bildkredit: peus / Depositphotos

Dan är en brittisk expat som bor i Mexiko. Han är den verkställande redaktören för MUO: s systerwebbplats, Blocks Decoded. Vid olika tillfällen har han varit socialredaktör, kreativ redaktör och finansredaktör för MUO. Du kan hitta honom som rusar på showgolvet på CES i Las Vegas varje år (PR-folk, räcker ut!), Och han gör massor av platser bakom kulisserna...