Annonse
Ville det ikke være bra hvis du automatisk kunne dempe datamaskinens lydutgang hver gang du kobler fra hodetelefonene? Det kan forhindre at du våkner flatkameratene dine i løpet av de små timene om morgenen, eller feilaktig avslører din kjærlighet til Britney Spears i offentligheten.
Selvfølgelig kan du dempe høyttalere og hodetelefoner fra sak til sak ved hjelp av Volummikser. (Lær mer om å tilpasse lyd i Windows 10.) Men ærlig talt, det er ikke nødvendig å gjøre det når du kan automatisere det med PowerShell.
Slik slår du automatisk av lyden på datamaskinen din når du fjerner hodetelefonene, akkurat som smarttelefoner gjør.
Åpne Notisblokk for å komme i gang. Lim deretter inn følgende kode i det tomme dokumentet:
[Cmdletbinding ()] Param () # Legger til definisjoner for tilgang til Audio API. Add-Type -TypeDefinition @ ' bruker System. Runtime. InteropServices; [Veiledning ("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] grensesnitt IAudioEndpointVolume { // f (), g (),... er ubrukte COM-metodespor. Definer disse hvis du bryr deg. int f (); int g (); int h (); int i (); int SetMasterVolumeLevelScalar (float fLevel, System. Guid pguidEventContext); int j (); int GetMasterVolumeLevelScalar (ut flyte pfLevel); int k (); int l (); int m (); int n (); int SetMute ([MarshalAs (UnmanagedType. Bool)] bool bMute, System. Guid pguidEventContext); int GetMute (ut bool pbMute); } [Veiledning ("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] grensesnitt IMMDevice { int Aktiver (ref System. Guid id, int clsCtx, int aktiveringParams, out IAudioEndpointVolume aev); } [Veiledning ("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType (ComInterfaceType. InterfaceIsIUnknown)] grensesnitt IMMDeviceEnumerator { int f (); // Ubrukt. int GetDefaultAudioEndpoint (int dataFlow, int role, out IMMDevice endpoint); } [ComImport, Guid ("BCDE0395-E52F-467C-8E3D-C4579291692E")] klasse MMDeviceEnumeratorComObject {} offentlig klasse Audio { statisk IAudioEndpointVolume Vol () { var enumerator = new MMDeviceEnumeratorComObject () som IMMDeviceEnumerator; IMMDevice dev = null; Marshal. ThrowExceptionForHR (enumeratoren. GetDefaultAudioEndpoint (/ * eRender * / 0, / * eMultimedia * / 1, out dev)); IAudioEndpointVolume epv = null; var epvid = typeof (IAudioEndpointVolume) .GUID; Marshal. ThrowExceptionForHR (dev. Aktiver (ref epvid, / * CLSCTX_ALL * / 23, 0, out epv)); returnere epv; } offentlig statisk flytende volum { få {flyte v = -1; Marshal. ThrowExceptionForHR (Vol (). GetMasterVolumeLevelScalar (ut v)); return v;} sett {Marshal. ThrowExceptionForHR (Vol (). SetMasterVolumeLevelScalar (verdi, system. Guid. Tømme));} } offentlig statisk bool Demp { få {bool mute; Marshal. ThrowExceptionForHR (Vol (). GetMute (out mute)); return mute; } sett {Marshal. ThrowExceptionForHR (Vol (). SetMute (verdi, system. Guid. Tømme)); } } } '@ -Verbose While ($ true) { # Rens alle hendelser i den nåværende økten siden det er i en uendelig sløyfe, for å få en ny start når loop starter. Get-Event | Fjern-hendelse -ErrorAction SilentlyContinue #Registrering av hendelsen og venter på at hendelsen skal utløses. Register-WmiEvent -Class Win32_DeviceChangeEvent. Wait-Event -OutVariable Event | Out-Null $ EventType = $ Event.sourceargs.newevent | ` Sort-Object TIME_CREATED -Dending | ` Select-Object EventType -ExpandProperty EventType -First 1 # Betingelseslogikk å håndtere, Når du skal slå av / av Mute maskinen ved hjelp av Audio API. If ($ EventType -ekv 3) { [Audio]:: Mute = $ true. Skriv-verbose "Dempet [$ ((Get-Date) .tostring ())]" } elseif ($ EventType -eq 2 -og [Audio]:: Mute -eq $ true) { [Audio]:: Mute = $ falsk. Skriv-verbose "UnMuted [$ ((Get-Date) .tostring ())]" } }
Nå må du lagre filen i PS1-format. Når du ser på Lagre fil-dialogen, velger du Alle filer fra rullegardinmenyen og ring filen AutoMute.ps1. Navnet på filen er ikke viktig, så bare velg noe som er lett å huske.
For å aktivere skriptet, høyreklikk på den nyopprettede filen og velg Løpe. Skriptet vil være aktivt til du slår av maskinen.
Dette er bare en av mange måter PowerShell kan øke produktiviteten Øk produktiviteten din med Windows PowerShell-skriptHva om du kunne bringe produktiviteten til Linux over til Windows? De fleste Linux-distrosene er pakket med det kraftige Bash-skallet. PowerShell er en like kraftig terminal for Windows. Les mer . Det er masse PowerShell-cmdlets som vil forbedre Windows-opplevelsen din Powershell Cmdlets som vil forbedre Windows-administratorferdighetene dinePowershell er like deler kommandolinjeverktøy og skriptspråk. Det gir deg muligheten til å automatisere datamaskinen din via de samme kommandoene du bruker for å administrere den. Les mer .
Bildekreditt: peus / Depositphotos
Dan er en britisk utvandret bosatt i Mexico. Han er administrerende redaktør for MUOs søsterside, Blocks Decoded. På forskjellige tidspunkter har han vært sosial redaktør, kreativ redaktør og finansredaktør for MUO. Du kan finne ham streife rundt i showet på CES i Las Vegas hvert år (PR-folk, nå ut!), Og han gjør mye bak kulissene...