Windows 10 kan afzonderlijke audioprofielen bewaren voor verschillende audioapparaten. Voor elk audioapparaat dat je aansluit, kun je een ander volumeniveau instellen en wanneer het apparaat is aangesloten, wordt het volume automatisch aangepast. Natuurlijk houdt niemand een audioapparaat altijd gedempt. Ze zullen het volume verhogen of verlagen, maar niemand dempt gewoonlijk een audioapparaat.
Als u een hoofdtelefoon gebruikt met uw desktop en deze vaak moet loskoppelen, kunt u een klein PowerShell-script gebruiken dat automatisch het geluid dempt wanneer u uw hoofdtelefoon loskoppelt.
Dit is iets dat mobiele telefoons doen, dat wil zeggen, wanneer u uw hoofdtelefoon loskoppelt, stopt de muziek automatisch. De logica hierachter is dat je ofwel klaar bent met het luisteren naar muziek of dat je per ongeluk je koptelefoon hebt verwijderd en een snelle manier nodig hebt om hem uit te zetten. Het script is in feite op hetzelfde principe geschreven door Prateek Singh van GEEKEEFY .

Geluid automatisch dempen
Open Kladblok en plak het volgende;
[cmdletbinding()] Param() #Definities toevoegen voor toegang tot de Audio API Add-Type -TypeDefinition @' met behulp van System.Runtime.InteropServices; [Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IAudioEndpointVolume { // f(), g(), ... zijn ongebruikte COM-methode-slots. Definieer deze als u int f(); intg(); int h(); int i(); int SetMasterVolumeLevelScalar (float fLevel, System.Guid pguidEventContext); intj(); int GetMasterVolumeLevelScalar (uit float pfLevel); intk(); intl(); 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 activatieParams, uit IAudioEndpointVolume aev); } [Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IMMDeviceEnumerator {int f(); // Ongebruikte int GetDefaultAudioEndpoint (int dataFlow, int rol, uit IMMDevice-eindpunt); } [ComImport, Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] klasse MMDeviceEnumeratorComObject {} openbare klasse Audio { statisch IAudioEndpointVolume Vol() { var enumerator = nieuw MMDeviceEnumeratorComObviceEnumerator; 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)); terug epv; } public static float Volume { get {float v = -1; Marshal.ThrowExceptionForHR(Vol().GetMasterVolumeLevelScalar(uit v)); return v;} set {Marshal.ThrowExceptionForHR(Vol().SetMasterVolumeLevelScalar(value, System.Guid.Empty));} } public static bool Mute {get { bool mute; Marshal.ThrowExceptionForHR(Vol().GetMute(uit mute)); terug dempen; } set {Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); } } } '@ -Verbose While($true) { #Reinig alle gebeurtenissen in de huidige sessie aangezien deze zich in een oneindige lus bevindt, om een nieuwe start te maken wanneer de lus begint Get-Event | Remove-Event -ErrorAction SilentlyContinue #De gebeurtenis registreren en wachten tot de gebeurtenis wordt geactiveerd Register-WmiEvent -Class Win32_DeviceChangeEvent Wait-Event -OutVariable gebeurtenis |Out-Null $EventType = $Event.sourceargs. nieuw evenement | ` Sort-Object TIME_CREATED -Aflopend | ` Select-Object EventType -ExpandProperty EventType -Eerste 1 #Voorwaardelijke logica om te verwerken, Wanneer moet de machine worden gedempt/gedempt met behulp van Audio API If($EventType -eq 3) { [Audio]::Mute = $true Write-Verbose "Gedempt [$((Get-Date).tostring())]" } elseif($EventType -eq 2 -and [Audio]::Mute -eq $true) { [Audio]::Mute = $false Write-Verbose " Unmuted [$((Get-Date).tostring())]" } }
Sla het op met de PS1-bestandsextensie. Zorg ervoor dat u 'Alle bestanden' selecteert in de vervolgkeuzelijst voor het bestandstype. Geef het bestand een naam die u in één oogopslag laat zien wat het doet. Bewaar het ergens waar je het waarschijnlijk niet per ongeluk verwijdert, maar ook waar je het gemakkelijk kunt vinden als dat nodig is.
Het script uitvoeren
Power shell kan niet zomaar een script automatisch uitvoeren. Er is een ingebouwde beveiligingsmaatregel die dit verhindert, maar er is een manier om dit te omzeilen. We hebben een gedetailleerd artikel over hoe u dat kunt doen. Volg de instructies om het PowerShell-script dat u zojuist hebt gemaakt automatisch uit te voeren en gebruik een geplande taak om het script elke keer dat u uw pc opstart te starten.
Als alternatief kunt u het script handmatig uitvoeren wanneer u uw systeem opstart. Ik gebruik het nog geen 30 minuten en ik weet niet hoe ik eerder zonder moest.