Các bạn đã bao giờ gặp trường hợp đang nghe nhạc trên laptop nơi công cộng thì bạn vô ý gỡ tai nghe ra và âm thanh của file nhạc hay video bắt đầu chuyển qua phát bằng loa ngoài chưa? Những lúc như thế phải nói là quê không biết giấu mặt vào đâu luôn, đó là còn chưa kể lỡ như bạn đang coi mấy video tế nhị mà gặp trường hợp này thì hết chỗ trốn. 

Mình cũng từng rơi vào tình trạng như vậy nên hiểu rất rõ (ý là tình trạng phát nhạc loa ngoài nhé), chính vì thế hôm nay mình sẽ hướng dẫn các bạn cách tắt âm tự động mỗi khi rút tai nghe khỏi Windows 10.

Bước 1: Đầu tiên, các bạn cần tạo một Notepad bằng cách nhấp chuột phải vào desktop và chọn New rồi chọn Text Document.

Bước 2: Tiếp theo, bạn copy và paste dòng code sau đây vào Notepad mà bạn vừa tạ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())]"
}
}

Bước 3: Sau đó, chọn File rồi chọn Save As. Bạn đặt tên file bất kỳ với đuôi là .ps1, ví dụ như test.ps1. Ở dòng Save as type thì bạn chọn All Files

Bước 4: Để kích hoạt tính năng, bạn nhấp chuột phải vào file .ps1 mà bạn vừa tạo rồi chọn Run with PowerShell.

Bước 5: Một cửa sổ PowerShell sẽ hiện lên ám chỉ rằng file đang chạy. Bây giờ bạn thu nhỏ cửa sổ này lại chứ đừng tắt nhé, nếu bạn tắt thì file sẽ tắt theo và không chạy đấy.

Từ bây giờ, mỗi khi bạn tháo tai nghe ra khỏi laptop hay desktop thì âm thanh sẽ tự động tắt đi, tránh trường hợp phát ra loa ngoài.

File sẽ không tự động chạy nên mỗi khi bạn mở máy lên thì cứ bật file thủ công theo bước 4 bên trên nhé.

Vậy là mình đã hướng dẫn xong cho các bạn cách tự động tắt âm mỗi khi rút tai nghe trên Windows 10. Chúc các bạn thành công!