Windows 10 có thể giữ các cấu hình âm thanh riêng biệt cho các thiết bị âm thanh khác nhau. Đối với mỗi thiết bị âm thanh mà bạn kết nối, bạn có thể đặt mức âm lượng khác nhau và khi thiết bị được kết nối, âm lượng sẽ tự động điều chỉnh. Tất nhiên, không ai giữ một thiết bị âm thanh luôn bị tắt tiếng. Họ sẽ tăng hoặc giảm âm lượng nhưng không ai có thói quen tắt tiếng thiết bị âm thanh.
Nếu bạn sử dụng một cặp tai nghe với máy tính để bàn và thường xuyên phải ngắt kết nối chúng, bạn có thể sử dụng một đoạn mã PowerShell nhỏ sẽ tự động tắt âm thanh khi bạn rút tai nghe ra.
Đây là điều mà điện thoại di động làm, tức là khi bạn rút tai nghe ra, nhạc sẽ tự động dừng. Logic đằng sau điều này là bạn đã nghe nhạc xong hoặc bạn đã vô tình tháo tai nghe của mình và bạn cần một cách nhanh chóng để tắt nó đi. Về cơ bản, kịch bản được viết trên nguyên tắc đó bởi Prateek Singh của GEEKEEFY .

Tự động tắt âm thanh
Mở Notepad và dán phần sau;
[cmdletbinding ()] Param () # Thêm định nghĩa để truy cập Audio API Add-Type -TypeDefinition @ 'bằng System.Runtime.InteropServices; [Guid ("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType (ComInterfaceType.InterfaceIsIUnknown)] giao diện IAudioEndpointVolume {// f (), g (), ... là các khe phương thức COM không được sử dụng. Xác định các giá trị này nếu bạn quan tâm int f (); int g (); int h (); int i (); int SetMasterVolumeLevelScalar (float fLevel, System.Guid pguidEventContext); int j (); int GetMasterVolumeLevelScalar (ra float pfLevel); int k (); int l (); int m (); int n (); int SetMute ([MarshalAs (UnmanagedType.Bool)] bool bMute, System.Guid pguidEventContext); int GetMute (ra bool pbMute); } [Guid ("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType (ComInterfaceType.InterfaceIsIUnknown)] giao diện IMMDevice {int Activate (ref System.Guid id, int clsCtx, int kích hoạtParams, ra IAudioEndpointVolume aev); } [Guid ("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType (ComInterfaceType.InterfaceIsIUnknown)] giao diện IMMDeviceEnumerator {int f (); // Không sử dụng 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 IMMDevice; 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)); trả lại epv; } public static float Khối lượng {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 (tắt tiếng)); trở lại tắt tiếng; } set {Marshal.ThrowExceptionForHR (Vol (). SetMute (value, System.Guid.Empty)); }}} '@ -Verbose While ($ true) {# Xóa tất cả các sự kiện trong phiên hiện tại kể từ khi nó nằm trong một vòng lặp vô hạn, để bắt đầu lại khi vòng lặp bắt đầu Get-Event | Remove-Event -ErrorAction SilentlyContinue #Registering sự kiện và chờ sự kiện được kích hoạt Đăng ký-WmiEvent -Class Win32_DeviceChangeEvent Wait-Event -OutVariable Event | Out-Null $ EventType = $ Event.sourceargs. newevent | `Sắp xếp-Đối tượng TIME_CREATED -Tăng dần | `Select-Object EventType -ExpandProperty EventType -First 1 # Logic điều kiện để xử lý, Khi nào thì tắt tiếng máy bằng Audio API If ($ EventType -eq 3) {[Audio] :: Mute = $ true Write-Verbose" Đã tắt tiếng [$ ((Get-Date) .tostring ())] "} elseif ($ EventType -eq 2 -and [Audio] :: Mute -eq $ true) {[Audio] :: Mute = $ false Write-Verbose" Đã bỏ qua [$ ((Get-Date) .tostring ())] "}}
Lưu nó với phần mở rộng tệp PS1. Đảm bảo rằng bạn chọn 'Tất cả các tệp' từ danh sách loại tệp thả xuống. Đặt tên cho tệp sẽ cho bạn biết ngay tác dụng của nó. Lưu nó ở một số nơi bạn không thể vô tình xóa nó nhưng cũng là nơi bạn có thể dễ dàng tìm thấy nó nếu cần.
Chạy tập lệnh
PowerShell không thể chỉ tự động chạy một tập lệnh. Có một biện pháp bảo mật tích hợp ngăn nó làm như vậy nhưng có một cách để giải quyết. Chúng tôi có một bài viết chi tiết về cách bạn có thể làm điều đó. Làm theo hướng dẫn để tự động chạy tập lệnh PowerShell bạn vừa tạo và sử dụng tác vụ đã lên lịch để bắt đầu tập lệnh mỗi khi bạn khởi động PC của mình.
Ngoài ra, bạn có thể chạy script theo cách thủ công khi khởi động hệ thống của mình. Tôi đã sử dụng nó chưa đầy 30 phút và tôi không biết mình đã sống như thế nào nếu không có nó trước đây.