- - Kā automātiski izslēgt skaņu, kad operētājsistēmā Windows 10 ir atvienotas austiņas

Kā automātiski izslēgt skaņu, kad operētājsistēmā Windows 10 ir atvienotas austiņas

Windows 10 var saglabāt atsevišķus audio profilusdažādas audio ierīces. Katrai pievienotajai audio ierīcei varat iestatīt atšķirīgu skaļuma līmeni, un, kad ierīce ir pievienota, skaļums tiek automātiski pielāgots. Protams, neviens neglabā skaņas ierīci visu laiku izslēgtu. Tie palielinās vai samazinās skaļumu, bet neviens parasti neaptver audio ierīci. Ja ar darbvirsmu izmantojat austiņu pāri un bieži vien tie ir jāatvieno, varat izmantot nelielu PowerShell skriptu, kas automātiski izslēps skaņu, atvienojot austiņas.

Tas ir kaut kas, ko dara mobilie tālruņi, t.i., atvienojot austiņas, mūzika automātiski apstājas. Loģika ir tāda, ka jūs esat vai nu beidzis klausīties mūziku, vai arī nejauši esat noņēmis austiņas, un jums ir nepieciešams ātrs veids, kā tās izslēgt. Scenāriju pamatā uz šī paša principa uzrakstīja Prateeks Singhs no GEEKEEFY.

Automātiski izslēgt skaņu

Atveriet Notepad un ielīmējiet šo;

[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())]"
}
}

Saglabājiet to ar faila PS1 paplašinājumu. Pārliecinieties, ka nolaižamajā faila tipā atlasāt “Visi faili”. Piešķiriet failam vārdu, kas īsumā jums pateiks, ko tas dara. Saglabājiet to vietā, kuru, visticamāk, nedzēsīsit nejauši, bet arī tur, kur to nepieciešams viegli atrast.

Skripta vadīšana

PowerShell nevar tikai autorizēt skriptu. Ir iebūvēts drošības pasākums, kas neļauj to darīt, taču ir kaut kas tam apkārt. Mums ir detalizēts raksts par to, kā jūs varat to izdarīt. Izpildiet norādījumus, lai automātiski palaistu tikko izveidoto PowerShell skriptu, un katru reizi, kad palaižat datoru, izmantojiet ieplānoto uzdevumu, lai sāktu skriptu.

Alternatīvi, palaižot sistēmu, varat manuāli palaist skriptu. Es to izmantoju mazāk nekā 30 minūtes, un es nezinu, kā es pirms tam dzīvoju bez tā.

Komentāri