Wie kann ich unter Windows 7 über die Befehlszeile auf die Lautstärke zugreifen?

17

Was ich brauche

Ich suche ein Tool oder ein Skript, mit dem ich über die Befehlszeile auf die Windows-Lautstärke zugreifen kann. Im Idealfall würde es mir ermöglichen, alle Volumes einschließlich der Anwendungsebenen abzurufen und festzulegen, aber ich würde mich damit begnügen, nur die Master-Ebene abzurufen. Ich habe nichts dagegen , wenn es verwendet PowerShell, WMI, JavaScript, .Net, Voodoo, oder Schmetterlinge. Jede Lösung, die mir nur eine Zahl gibt, die ich weiterverarbeiten kann, um einen Bereich von 0% bis 100% anzupassen, ist ausreichend.

Anders ausgedrückt, die Prompt-Teile sind die Black Box, die ich füllen muss:

C:\> getvol master
50

oder auch

C:\> wmic <alias> where "device='master' and name='volume'" get name,value
Name    Value
Volume  0xDEADBEEF

Es macht mir nichts aus, wenn ich etwas Zeit damit verbringen muss, es zu verpacken, oder selbst etwas zu schreiben, wenn die Werkzeuge dafür frei verfügbar sind. In letzterem Fall würde ich einige Hinweise / Proof-of-Concept für den Kern benötigen, aber ich kann die Kruft selbst verwalten. Außerdem möchte ich vermeiden, neue Entwicklungsframeworks nur für diesen Zweck zu installieren (beachten Sie, dass die Antworten von music2myear und iglvzx bereits gegeben wurden, bevor ich diese Anforderungen einführte).

Als "Plattformen" habe ich zur Verfügung:

  • Alles, was mit Windows 7 Home Premium geliefert wird
  • alles, was mit Cygwin kommt
  • Perl
  • Python
  • Rubin

Im Allgemeinen werden Open-Source-Lösungen stark bevorzugt. Closed-Source-Tools sind in Ordnung, solange sie Freeware sind und der Quelle vertraut werden kann. Kommerzielle Lösungen sind no-go.

Was ich nicht brauche

  • Es gibt einige ähnliche Fragen , die sich hauptsächlich mit der Einstellung der Lautstärke befassen. Vor allem muss ich bekommen das Volumen, nicht festgelegt.
  • Es gibt nircmdc, die das Einstellen der Lautstärke unterstützen, aber nicht bekommen.
  • Es gibt einen Schlüssel [1] in meiner Registrierung, dessen Werte sich vorhersehbar ändern, wenn ich die Lautstärke über den GUI-Mixer anpasse. Ich würde jedoch davon ausgehen, dass das Lesen von diesem Schlüssel bei Hardwareänderungen oder Systemaktualisierungen zu Problemen führen kann. Wenn ich mich nicht darauf verlassen kann, dass die Lösung einigermaßen zukunftssicher ist, kann ich sie nicht verwenden.
  • Es gibt AutoHotKeyund WSHLösungen für das Einstellen der Lautstärke im Web, aber a) sie sind auch nur zum Einstellen gut und, schlimmer noch, b) sie verwenden SendKeysoder automatisieren die Mausbewegung, um die GUI zu steuern. Die Automatisierung der Benutzeroberfläche ist keine Option.

Der ##windowsKanal auf freenode ist nach wie vor nicht hilfreich, Google ist überfüllt mit Hacks und halbfertigen Workarounds, und ich kann einen WinAPI-Aufruf nicht von einer Wiccan-Beschwörung unterscheiden.

Kennt jemand einen Weg?


  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0000\MixerSettings\eLineOutTopo\PrimaryNode000
peth
quelle
Semms wie WMI ist keine Option :(
Der Hochstapler
Möglicherweise relevant: superuser.com/questions/284527/…
Der Hochstapler
Muss ich meine Antwort erweitern? Ich war mir nicht sicher, ob Sie mehr brauchen, da Sie anscheinend Erfahrung mit Programmierung haben. Ich kann Ihnen ein Beispiel geben, wie Sie mit AutoHotkey auf einfache Weise Ihr Ziel erreichen können.
Iglvzx
Ich denke, es ist ein sehr guter Vorschlag. Nochmals vielen Dank, aber AHK hat mich einmal gebissen und ich bin seitdem schüchtern. Ich würde es wahrscheinlich nicht benutzen, selbst wenn es eine vollwertige Lösung wäre. Nichts hält Sie davon ab, es für zukünftige Leser / mehr Stimmen zu erweitern. :)
peth
1
(Als Hinweis, dass reg. nicht einmal auf meiner Box zu existieren scheint, also ... ist es in der Tat möglicherweise instabil). Siehe auch meine c ++ - Antwort hier: stackoverflow.com/a/21056089/32453
Rogerdpack

Antworten:

5

Diese Frage wurde auf StackOverflow gestellt und beantwortet: /programming/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

Die Antwort lautet : /programming//a/4640225/704977

Sie suchen nach der EndpointVolume-API. Dies ist Teil der neuen Audio-APIs, die in Windows Vista veröffentlicht wurden, und kann zum Abrufen oder Festlegen der Master-Lautstärke verwendet werden.
... In CodeProject ist eine vollständige verwaltete Wrapper-Bibliothek verfügbar: Vista Core Audio API Master Volume Control.

music2myear
quelle
Danke für den Hinweis! Muss ich das selbst codieren oder kennen Sie vielleicht ein kleines Tool, das aus der Frage / Antwort hervorgegangen ist? Ich habe C # noch nicht berührt: Wenn ich es selbst codieren muss, gibt es einen frei verfügbaren Compiler?
Donnerstag,
Im schlimmsten Fall müssen Sie Visual Studio C # Express herunterladen, das kostenlos ist: microsoft.com/visualstudio/en-us/products/2010-editions/…
music2myear
Diese spezielle Antwort habe ich nur gefunden, als ich nach einer Lösung für Ihre Frage gesucht habe. Ich habe nicht weiter nachgeforscht, ob es eine kompilierte Binärdatei gibt, die bereits öffentlich verfügbar ist.
music2myear
Diese Google-Suche scheint
vielversprechend
2
Dieser scheint C # -orientiert zu sein. Wenn Sie nach einer C ++ 'ish-Option suchen,
lesen
4

Ich weiß, Sie sagten, Sie wollten keine AutoHotkey-Lösung, aber ich glaube, die AutoHotkey- API hat das, wonach Sie suchen:

Sie müssen keine GUIs erstellen oder Hotkeys mit AutoHotkey verwenden. Sie können leistungsstarke Befehlszeilendienstprogramme schreiben, indem Sie ein .ahkSkript kompilieren . Abgesehen davon sollten Sie sich den FileAppend- Befehl ansehen, um damit zu arbeiten stdout.

iglvzx
quelle
Hier ist eine, die es schafft: gist.github.com/rdp/8363141 (obwohl eine gerade Konsolen-App dafür einfacher / einfacher sein kann, siehe andere Kommentare hier)
Rogerdpack
0

Das Master-Volume wird im Registrierungsspeicherort gespeichert:

...\#eSpeakerTopo\Properties\{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}

Diese REG-Datei legt beispielsweise die Hauptlautstärke auf 100% fest.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\DeviceClasses\{6994ad04-93ef-11d0-a3cc-00a0c9223196}\##?#HDAUDIO#FUNC_01&VEN_8384&DEV_7680&SUBSYS_83847680&REV_1034#4&31e60982&0&0001#{6994ad04-93ef-11d0-a3cc-00a0c9223196}\#eSpeakerTopo\Properties\{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}\20000]
@=hex(ffff1003):00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00

Der Schlüsselname kann abweichen. Sie müssen neu starten, damit die Änderungen wirksam werden.

Sie sind möglicherweise nicht in der Lage das zu bearbeiten oder öffnen Propertiesoder {7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}in Schlüssel regedit. Obwohl Sie über die erforderlichen Zugriffsberechtigungen verfügen, wird möglicherweise die folgende Fehlermeldung angezeigt:

[Window Title]
Error Opening Key

[Content]
{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc} cannot be opened.
An error is preventing this key from being opened.

[OK]

Dies liegt daran, dass der Schlüsselname zu lang ist. Sie müssen den langen Tastennamen vorübergehend in ein Zeichen umbenennen und dann wieder umbenennen.

XP1
quelle