web-dev-qa-db-de.com

Audiopegel von Powershell ändern?

Wie kann ich mit Powershell die Lautsprecherlautstärke einstellen? Ich habe hier und anderswo herumgegraben, kann wirklich keine Antwort finden.

Ich denke, ich muss etwas in C # schreiben, das eine Win32-API einschließt und dann von meinem Powershell-Skript aus aufgerufen wird. Die Win32-API wäre eine davon

[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);
11
bitshift

SendKeys funktionierte für mich in Windows 10 nicht mehr (es schreibt buchstäblich Ziffern, wo mein Caret steht). Ich habe diesen Blogbeitrag mit einer sehr bequemen Methode gefunden.

Führen Sie zunächst Folgendes aus, um Zugriff auf die Audio-API zu erhalten:

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

Dann steuere die Lautstärke wie folgt:

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

Und stummschalten/stummschalten wie folgt:

[audio]::Mute = $true  # Set to $false to un-mute
14
Vimes

Ich habe ein Cmdlet zum Bearbeiten von Audiogeräten erstellt.

http://www.automatedops.com/projects/windowsaudiodevice-powershell-cmdlet/

Es enthält sogar eine Live-Anzeige von Spitzenwerten.

enter image description here

15
logicaldiagram

Mit diesen Befehlen können wir die Lautstärke der Lautsprecher stummschalten, leiser stellen und lauter machen. Eine einfache 1..50-Schleife (jeder Zähler = 2% Volumen) kann hinzugefügt werden, um eine Funktion zu erstellen, die Eingaben akzeptiert und die Lautstärke anpasst, ohne dass C # erforderlich ist. 

Lautstärke stummschalten

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

Leiser-Taste

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

Lauter-Taste

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

Hier finden Sie relevante Informationen.

Wie kann ich meinen Sound von PowerShell aus stummschalten/aufheben

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

BEARBEITEN: Hier ist eine wiederverwendbare Funktion, die auf W7x64 mit Powershell v2 getestet wurde und funktioniert. 

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

Verwendungsbeispiel. Denken Sie daran, dass jeder Tick 2% beträgt.

#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 wird Toggle-Mute

Function Toggle-Mute(){$wshShell = new-object -com wscript.Shell;$wshShell.SendKeys([char]173)}
#
7
Knuckle-Dragger

Schauen Sie sich dieses PC Volume Control-Skript auf TechNet an . Sie behauptet, das zu tun, wonach Sie verlangen - zumindest unter Windows XP. Hier ist ein weiterer Ansatz, der ein Tool namens NirCmd verwendet.

1
Keith Hill