„Windows 10“ gali laikyti atskirus garso profiliusskirtingi garso įtaisai. Kiekvienam prijungtam garso įrenginiui galite nustatyti skirtingą garsumo lygį, o prijungus įrenginį garsumas bus reguliuojamas automatiškai. Žinoma, niekas nelaiko garso įrenginio visą laiką nutildytu. Jie padidins arba sumažins garsumą, bet niekas paprastai garso įrenginio neatidarys. Jei darbalaukyje naudojate porą ausinių ir dažnai turite jas atjungti, galite naudoti mažą „PowerShell“ scenarijų, kuris automatiškai nutildys garsą, kai atjungsite ausines.
Tai daro tai, ką daro mobilieji telefonai, t.y., kai atjungiate ausines, muzika automatiškai sustoja. To logika yra ta, kad jūs arba baigėte klausytis muzikos, arba netyčia išėmėte ausines ir jums reikia greito būdo, kaip jas išjungti. Scenarijų iš esmės tuo pačiu principu parašė Prateekas Singhas iš GEEKEEFY.

Automatiškai nutildyti garsą
Atidarykite „Notepad“ ir įklijuokite šiuos dalykus;
[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())]" } }
Išsaugokite jį naudodami PS1 failo plėtinį. Įsitikinkite, kad išskleidžiamajame failo tipo pasirinkote „Visi failai“. Suteikite failui vardą, kuris akimirksniu jums pasakys, ką jis daro. Išsaugokite jį vietoje, kur vargu ar ištrinsite atsitiktinai, bet taip pat ten, kur prireikus lengvai rasite.
Vykdo scenarijų
„PowerShell“ gali ne tik leisti scenarijų automatiškai. Yra įmontuota apsaugos priemonė, neleidžianti jai to daryti, tačiau yra aplinkybė. Turime išsamų straipsnį, kaip galite tai padaryti. Vykdykite instrukcijas, kad automatiškai paleistumėte ką tik sukurtą „PowerShell“ scenarijų, ir naudokite suplanuotą užduotį, kad scenarijus būtų paleistas kiekvieną kartą paleidus kompiuterį.
Arba galite rankiniu būdu paleisti scenarijų paleisdami savo sistemą. Aš jį naudoju mažiau nei 30 minučių ir nežinau, kaip aš anksčiau be jo gyvenau.
Komentarai