¿Cómo puedo acceder a los niveles de volumen desde la línea de comandos en Windows 7?

16

Lo que necesito

Estoy buscando una herramienta o un script que me permita acceder a los niveles de volumen de Windows desde la línea de comandos. Idealmente, me permitiría obtener y establecer todos los volúmenes, incluidos los niveles de aplicación, pero me conformaría con obtener solo y solo el nivel maestro. No me importa si se usa PowerShell, WMI, JavaScript, .Net, vudú, o mariposas. Cualquier solución que solo me dé un número que pueda procesar para un rango de 0% a 100% funcionará.

Dicho de otra manera, las partes de solicitud son el cuadro negro que necesito llenar:

C:\> getvol master
50

o incluso

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

No me importa si tengo que pasar algún tiempo para envolverlo o incluso escribir algo yo mismo si las herramientas para hacerlo están disponibles gratuitamente. En el último caso, necesitaría algunos punteros / prueba de concepto para el núcleo, pero puedo manejar el ruft por mi cuenta. También me gustaría evitar instalar nuevos marcos de desarrollo solo para este propósito (tenga en cuenta que las respuestas de music2myear e iglvzx se dieron antes de que introdujera estos requisitos).

Como "plataformas", tengo disponible:

  • todo lo que viene con Windows 7 Home Premium
  • todo lo que viene con Cygwin
  • Perl
  • Pitón
  • Rubí

En general, las soluciones de código abierto son muy preferidas. Las herramientas de código cerrado están bien siempre que sean gratuitas y se pueda confiar en la fuente. Las soluciones comerciales son prohibidas.

Lo que no necesito

  • Hay algunas preguntas similares que se ocupan principalmente de configurar el volumen. Sobre todo, necesito obtener el volumen, no establecerlo.
  • Hay nircmdc, que admite la configuración de volumen, pero no obtener.
  • Hay una clave [1] en mi registro que tiene valores que cambian de manera predecible cuando ajusto el volumen a través del mezclador GUI, pero supongo que la lectura de esa clave es propensa a la rotura de cambios de hardware o actualizaciones del sistema. A menos que pueda confiar en que la solución esté razonablemente preparada para el futuro, no puedo usarla.
  • Hay AutoHotKeyy WSHsoluciones para configurar el volumen en la Web, pero a) también son buenas para configurar y, lo que es peor, b) usan SendKeysel movimiento automático del mouse para controlar la GUI. Automatizar la GUI no es una opción.

El ##windowscanal en freenode es inútil como siempre, Google se desborda con hacks y soluciones a medio hacer, y no puedo distinguir una llamada WinAPI de un encantamiento Wiccan.

¿Alguien sabe de alguna manera?


  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0000\MixerSettings\eLineOutTopo\PrimaryNode000
peth
fuente
Semms como WMI no es una opción :(
Der Hochstapler
Posiblemente relevante: superuser.com/questions/284527/…
Der Hochstapler
¿Necesitas que amplíe mi respuesta? No estaba seguro de que necesitaras más, ya que pareces tener experiencia con la programación. Puedo proporcionar un ejemplo sobre cómo puede usar AutoHotkey para lograr fácilmente su objetivo.
iglvzx
Creo que es una muy buena sugerencia, gracias de nuevo, pero AHK me mordió una vez y desde entonces soy tímida. Probablemente no lo usaría incluso si fuera una solución completa. Sin embargo, nada le impide expandirse para futuros lectores / más votos a favor. :)
peth
1
(Como una nota de que el registro no parece existir en mi caja, entonces ... puede ser inestable de hecho). Vea también mi respuesta de C ++ aquí: stackoverflow.com/a/21056089/32453
rogerdpack

Respuestas:

5

Esta pregunta fue formulada y respondida en StackOverflow: https://stackoverflow.com/questions/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

La respuesta: https://stackoverflow.com/a/4640225/704977

Estás buscando la API EndpointVolume. Esto es parte de las nuevas API de audio que se lanzaron en Windows Vista, y se puede usar para obtener o configurar el volumen maestro.
... Hay una biblioteca de envoltorio administrada completa disponible en CodeProject: Vista Core Audio API Master Volume Control.

music2myear
fuente
¡Gracias por la anotación! ¿Tendré que codificar esto yo mismo o quizás conoces una pequeña herramienta que surgió de la pregunta / respuesta? No he tocado C # antes: si tengo que codificarlo yo mismo, ¿hay un compilador disponible gratuitamente?
peth
En el peor de los casos, deberá descargar Visual Studio C # Express, que es gratuito: microsoft.com/visualstudio/en-us/products/2010-editions/…
music2myear
Solo encontré esta respuesta en particular mientras buscaba una solución a su pregunta. No he realizado más investigaciones para ver si hay un binario compilado disponible públicamente.
music2myear
Esta búsqueda en Google parece tener alguna promesa: google.com/search?q=get+current+volume+by+command+line+windows
music2myear
2
Ese parece estar orientado a C #. Si está buscando una opción ish de C ++, consulte stackoverflow.com/a/21056089/32453
rogerdpack
4

Sé que dijiste que no querías una solución AutoHotkey, pero creo que la API de AutoHotkey tiene lo que estás buscando:

No necesita crear GUI ni utilizar teclas de acceso rápido con AutoHotkey. Puede escribir potentes utilidades de línea de comandos compilando un .ahkscript. Dicho esto, tendrá que mirar el comando FileAppend para trabajar con stdout.

iglvzx
fuente
aquí hay uno que lo hace: gist.github.com/rdp/8363141 (aunque una aplicación de consola directa para ella puede ser más simple / fácil, vea otros comentarios aquí)
rogerdpack
0

El volumen maestro se almacena en la ubicación del registro:

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

Por ejemplo, este archivo REG establece el volumen maestro al 100%.

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

El nombre de la clave puede diferir. Debe reiniciar para que los cambios surtan efecto.

Es posible que no pueda editar o abrir la tecla Propertieso . Aunque tiene los permisos de acceso necesarios, puede recibir un error como este:{7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc}regedit

[Window Title]
Error Opening Key

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

[OK]

Esto se debe a que el nombre de la clave es demasiado largo. Tendrá que cambiar temporalmente el nombre de la clave larga a un carácter y luego cambiarle el nombre.

XP1
fuente