- Kaip automatiškai nutildyti garsą, kai "Windows 10" ausinės yra atjungtos

Kaip automatiškai nutildyti garsą, kai ausinės yra atjungtos "Windows 10"

„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