Windows 10 için ayrı ses profilleri tutabilirFarklı ses cihazları. Bağladığınız her ses cihazı için farklı bir ses seviyesi ayarlayabilirsiniz; cihaz bağlandığında ses seviyesi otomatik olarak ayarlanır. Tabii ki, hiç kimse bir ses cihazını sürekli susturmaz. Ses seviyesini artıracak veya azaltacaklar ancak hiç kimse bir ses cihazını alışılmadık şekilde kapatmıyor. Masaüstünüzde bir çift kulaklık kullanıyorsanız ve bunların bağlantısını kesmek zorunda kalırsanız, kulaklıklarınızı çıkardığınızda sesi otomatik olarak kapatan küçük bir PowerShell betiği kullanabilirsiniz.
Bu, cep telefonlarının yaptığı bir şey., kulaklıklarınızı çıkardığınızda, müzik otomatik olarak durur. Bunun ardındaki mantık, müzik dinlemiş olmanız ya da kulaklıklarınızı yanlışlıkla çıkarmanız ve kapatmak için hızlı bir yol kullanmanızdır. Senaryo temel olarak aynı prensibe göre GEEKEEFY'den Prateek Singh tarafından yazılmıştır.
Sesi Otomatik Olarak Sustur
Not Defteri'ni açın ve aşağıdakileri yapıştırın;
[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())]" } }
PS1 dosya uzantısı ile kaydedin. Aşağı açılır dosya türünden ‘Tüm Dosyalar’ seçtiğinizden emin olun. Dosyaya bir bakışta ne yapacağını söyleyecek bir isim verin. Kazayla silmek istemediğiniz ancak ihtiyaç duyduğunuzda kolayca bulabileceğiniz bir yere kaydedin.
Komut Dosyasını Çalıştırma
PowerShell sadece bir komut dosyasını otomatik olarak çalıştıramaz. Dahili bir güvenlik önlemi var, bunu engelliyor ama bunun bir yolu var. Bunu nasıl yapabildiğinizle ilgili ayrıntılı bir makalemiz var. Yeni oluşturduğunuz PowerShell betiğini otomatik olarak çalıştırmak için talimatları izleyin ve bilgisayarınızı her başlatışınızda betiği başlatmak için zamanlanmış bir görev kullanın.
Alternatif olarak, sisteminizi başlattığınızda komut dosyasını el ile çalıştırabilirsiniz. 30 dakikadan daha az bir süredir kullanıyorum ve daha önce onsuz nasıl yaşadığımı bilmiyorum.
Yorumlar