Windows 10 יכול לשמור פרופילי שמע נפרדים עבורהתקני שמע שונים. לכל התקן שמע שאתה מחבר, אתה יכול להגדיר רמת עוצמת קול שונה וכאשר המכשיר מחובר, עוצמת הקול תסתגל אוטומטית. כמובן, אף אחד לא שומר על התקנת שמע כל הזמן. הם יגדילו או יפחיתו את עוצמת הקול, אך איש אינו נוהג להשתיק מכשיר שמע. אם אתה משתמש בזוג אוזניות בשולחן העבודה שלך ולעיתים קרובות עליך לנתק אותן, באפשרותך להשתמש בסקריפט PowerShell קטן שישתיק אוטומטית צליל כשתנתק את האוזניות.
זה דבר שהטלפונים הניידים עושים, כלומר, כשאתה מנתק את האוזניות, המוזיקה נעצרת אוטומטית. ההיגיון שעומד מאחורי זה הוא שאתה עשית להאזין למוזיקה או שהסרת בטעות את האוזניות שלך ואתה זקוק לדרך מהירה לכיבוי. התסריט נכתב בעיקרון על אותו עיקרון על ידי Prateek Singh מ- GEEKEEFY.
השתק צליל באופן אוטומטי
פתח את פנקס הרשימות והדבק את הדברים הבאים;
[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. הקפד לבחור 'כל הקבצים' מהתפריט הנפתח של סוג הקובץ. תן לקובץ שם שיגיד לך במבט חטוף מה הוא עושה. שמור אותו במקום שלא צפוי למחוק אותו במקרה, אך גם במקום בו תוכל למצוא אותו בקלות אם אתה צריך.
הפעלת התסריט
PowerShell לא יכול רק להפעיל מחדש סקריפט. יש אמצעי אבטחה מובנה שמונע את זה לעשות זאת אבל יש דרך לעקוף אותו. יש לנו מאמר מפורט על איך אתה יכול לעשות בדיוק את זה. עקוב אחר ההוראות להפעלה אוטומטית של סקריפט ה- PowerShell שיצרת זה עתה, והשתמש במשימה מתוזמנת כדי להפעיל את הסקריפט בכל פעם שאתה מאתחל את המחשב שלך.
לחלופין, באפשרותך להפעיל את הסקריפט ידנית כאשר אתה מאתחל את המערכת. אני משתמש בו פחות מ 30 דקות ואני לא יודע איך חייתי בלעדיו לפני כן.
הערות