2014-01-25 10 views
5

Wie kann ich mit Powershell die Lautsprecherlautstärke einstellen? Ich habe hier und anderswo online gegraben kann wirklich keine Antwort finden.Audio-Pegel von der Powershell ändern?

Ich denke, ich muss etwas in C# schreiben, das eine Win32-API umschließt und sie dann von meinem Powershell-Skript aufruft. Die Win32-API wäre eine dieser

[DllImport("winmm.dll")] 
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume); 

[DllImport("winmm.dll")] 
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume); 
+0

Sie verwenden die falsche API, um dies von Vista/W7 oder höher (aber richtig für XP. Wenn auf Vista/W7 oder höher in das EndpointVolumeschauen http://msdn.microsoft.com/en-us/library/ms678715.aspx –

Antwort

10

Sendkeys beendet in Windows 10 für mich arbeiten (es buchstäblich Arten Stellen, wo meine caret ist). Ich fand this blog post mit einer sehr bequemen Art, es zu tun.erhalten Sie Zugriff auf die Audio-API

Zuerst diese auszuführen:

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)); } 
    } 
} 
'@ 

steuern dann die Lautstärke wie folgt aus:

[audio]::Volume = 0.2 # 0.2 = 20%, etc. 

Und Mute/unmute wie folgt aus:

[audio]::Mute = $true # Set to $false to un-mute 
+3

Diese Lösung stammt ursprünglich aus [dieser Stack Overflow Beitrag] (http://stackoverflow.com/questions/255419/how-can- i-mute-Stummschaltung-mein-Sound-aus-Powershell/19348221 # 19348221). Es gibt auch ein bisschen mehr Informationen dort. – Mica

+0

Danke für dieses tolle Stück Code! Funktioniert gut mit Win10 – MKANET

7

Mit diesen Befehlen können Sie die Lautsprecherlautstärke stummschalten, lautstärken verringern und lauter stellen. Eine einfache Schleife 1..50 (jeder Zähler = 2% Volumen) kann hinzugefügt werden, um eine Funktion zu erstellen, die Eingaben akzeptiert und die Lautstärke ohne C# anpasst.

Volume Mute

$obj = new-object -com wscript.shell 
$obj.SendKeys([char]173) 

Volume Down-Taste

$obj = new-object -com wscript.shell 
$obj.SendKeys([char]174) 

Lauter-Knopf

$obj = new-object -com wscript.shell 
$obj.SendKeys([char]175) 

finden einige relevante Informationen hier.

How can I mute/unmute my sound from PowerShell

http://blogs.technet.com/b/heyscriptingguy/archive/2013/07/28/weekend-scripter-cheesy-script-to-set-speaker-volume.aspx

EDIT: Hier ist eine wiederverwendbare Funktion, getestet und arbeitet an W7x64 w/Powershell v2.

Function Set-Speaker($Volume){$wshShell = new-object -com wscript.shell;1..50 | % {$wshShell.SendKeys([char]174)};1..$Volume | % {$wshShell.SendKeys([char]175)}} 
# 

Beispiel Verwendung. Denken Sie daran, jede Zecke ist 2%

#Sets volume to 60% 
Set-Speaker -Volume 30 

#Sets volume to 80% 
Set-Speaker -Volume 40 

#Sets volume to 100% 
Set-Speaker -Volume 50 

und diese Funktion Toggle-Mute

Function Toggle-Mute(){$wshShell = new-object -com wscript.shell;$wshShell.SendKeys([char]173)} 
# 
Verwandte Themen