web-dev-qa-db-fra.com

Comment accéder aux niveaux de volume de la ligne de commande sur Windows 7?

Ce dont j'ai besoin

Je cherche un outil ou un script qui me permet d'accéder aux niveaux de volume de Windows à partir de la ligne de commande. Idéalement, cela me permettrait d'obtenir et de définir tous les volumes, y compris des niveaux d'application, mais je ne me contenterais que d'obtenir, et seulement le niveau maître. Cela ne me dérange pas s'il utilise PowerShell, WMI, JavaScript, .Net, Vaudou ou papillons. Toute solution qui va simplement me donner un numéro que je peux approfondir le processus pour s'adapter à une plage de 0% à 100%.

Mettez un autre moyen, les parties rapides sont la boîte noire que j'ai besoin remplie:

C:\> getvol master
50

ou même

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

Cela ne me dérange pas si je dois passer du temps à envelopper ou même à écrire quelque chose moi-même si les outils à faire sont librement disponibles. Dans ce dernier cas, j'aurais besoin de quelques pointeurs/preuve de concept pour le noyau, mais je peux gérer le cruft seul. J'aimerais aussi éviter d'installer de nouveaux cadres de développement uniquement à cet effet (note que Music2myear's et iglvzx's réponses a été donnée avant J'ai introduit ces exigences).

Comme "plates-formes", j'ai disponible:

  • tout ce qui est livré avec Windows 7 Home Premium
  • tout ce qui vient avec Cygwin
  • Perl
  • Python
  • Ruby

En règle générale, des solutions open source sont grandement préférées. Les outils à la source fermée sont corrects tant qu'ils sont gratuits et la source peut être approuvée. Les solutions commerciales ne sont pas passées.

Ce que je n'ai pas besoin

  • Il y a quelques-uns similairequestions qui traitent principalement de définir le volume. Surtout, j'ai besoin de obtenir le volume, non défini.
  • Il y a nircmdc , qui prend en charge le réglage du volume, mais ne pas obtenir.
  • Il existe une clé [1] dans mon registre qui a des valeurs qui changent de manière prévisible lorsque je réglais le volume via le mélangeur de l'interface graphique, mais je suppose que la lecture de cette clé est sujette à la rupture des modifications matérielles ou des mises à niveau du système. Sauf si je ne peux compter sur la solution étant raisonnablement une preuve future, je ne peux pas l'utiliser.
  • Il y a AutoHotKey et WSH solutions pour définir le volume sur le Web, mais a), ils ne sont que de bons pour le réglage et, pire, b) qu'ils utilisent SendKeys ou automatisé Mouvement de la souris pour contrôler l'interface graphique. L'automatisation de l'interface graphique n'est pas une option.

Le ##windows Channel On Freeenode n'est pas inutile, Google déborde de hacks et de travaux de contournement à moitié cuit, et je ne peux pas dire à un appel Winapi d'une incantation Wiccan.

Est-ce que quelqu'un sait-il d'une manière?


  1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0000\MixerSettings\eLineOutTopo\PrimaryNode000
17
peth

Cette question a été posée et répondu à Stackoverflow: https://stackoverflow.com/questions/4640106/how-to-get-current-volume-fsystem-sound-device-in-windows-7 Englisons

La réponse: https://stackoverflow.com/a/4640225/704977

Vous recherchez l'API Endpointvolume. Cela fait partie des nouvelles API audio libérées dans Windows Vista, et il peut être utilisé pour obtenir ou définir le volume principal.
[.____] ... Il existe une bibliothèque de wrapper gérée complète disponible sur CodeProject: Vista Core Audio API Volume Volume Volume.

5
music2myear

Je sais que vous avez dit que vous ne vouliez pas de solution Autohotkey, mais je crois que le Autohotkey API a ce que vous recherchez:

Vous n'avez pas besoin de créer des gis ou d'utiliser des raccourcis avec Autohotkey. Vous pouvez écrire de puissantes utilitaires de ligne de commande en compilant un .ahk script. Cela étant dit, vous voudrez examiner la commande FILEAPPEND pour travailler avec stdout.

4
iglvzx