Come posso accedere ai livelli di volume dalla riga di comando su Windows 7?


17

Ciò che di cui ho bisogno

Sto cercando uno strumento o uno script che mi consenta di accedere ai livelli di volume di Windows dalla riga di comando. Idealmente mi permetterebbe di ottenere e impostare tutti i volumi inclusi i livelli dell'applicazione, ma mi accontenterei di ottenere solo e solo il livello principale. Non mi importa se utilizza PowerShell, WMI, JavaScript, .Net, Voodoo, o farfalle. Qualsiasi soluzione che mi fornirà un numero che posso elaborare ulteriormente per adattarsi a un intervallo compreso tra 0% e 100% lo farà.

Detto in altro modo, le parti rapide sono la scatola nera che devo riempire:

C:\> getvol master
50

o anche

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

Non mi importa se devo passare un po 'di tempo per avvolgerlo o anche scrivere qualcosa da solo se gli strumenti per farlo sono disponibili gratuitamente. In quest'ultimo caso, avrei bisogno di alcuni puntatori / prove di concetto per il core, ma posso gestire la cruft da solo. Inoltre, vorrei evitare di installare nuovi framework di sviluppo solo per questo scopo (si noti che entrambe le risposte di music2myear e iglvzx sono state fornite prima di introdurre questi requisiti).

Come "piattaforme", ho disponibile:

  • tutto ciò che viene fornito con Windows 7 Home Premium
  • tutto ciò che viene fornito con Cygwin
  • Perl
  • Pitone
  • Rubino

In generale, le soluzioni open source sono molto preferite. Gli strumenti a sorgente chiuso sono ok fintanto che sono freeware e la fonte può essere attendibile. Le soluzioni commerciali sono no-go.

Ciò di cui non ho bisogno

  • Ci sono alcune domande simili che riguardano principalmente l'impostazione del volume. Soprattutto, ho bisogno di ottenere il volume, non impostato.
  • C'è nircmdc, che supporta l'impostazione del volume, ma non ottenere.
  • Esiste una chiave [1] nel mio registro che ha valori che cambiano in modo prevedibile quando aggiusto il volume tramite il mixer della GUI, ma immagino che leggere da quella chiave sia soggetto a rotture su modifiche hardware o aggiornamenti di sistema. A meno che non possa fare affidamento sul fatto che la soluzione sia ragionevolmente a prova di futuro, non posso usarla.
  • Esistono AutoHotKeye WSHsoluzioni per impostare il volume sul Web, ma a) anche loro sono buoni solo per l'impostazione e, peggio ancora, b) usano SendKeyso il movimento automatico del mouse per controllare la GUI. L'automazione della GUI non è un'opzione.

Il ##windowscanale su freenode è inutile come sempre, Google trabocca di hack e soluzioni alternative e non riesco a dire una chiamata WinAPI da un incantesimo di Wiccan.

Qualcuno sa di un modo?


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



Hai bisogno di me per espandere la mia risposta? Non ero sicuro che avessi bisogno di più, dal momento che sembri avere esperienza con la programmazione. Posso fornire un esempio su come utilizzare AutoHotkey per raggiungere facilmente il tuo obiettivo.
iglvzx,

Penso che sia un ottimo suggerimento, grazie ancora, ma AHK mi ha morso una volta e da allora sono timido. Probabilmente non lo userei nemmeno se fosse una soluzione a tutti gli effetti. Niente che ti impedisca di espanderci per futuri lettori / altri voti. :)
peth

1
(come nota che il reg. non sembra nemmeno esistere sulla mia scatola, quindi ... potrebbe essere davvero instabile). Vedi anche la mia c ++ risposta qui: stackoverflow.com/a/21056089/32453
rogerdpack

Risposte:


5

Questa domanda è stata posta e ha risposto su StackOverflow: /programming/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

La risposta: /programming//a/4640225/704977

Stai cercando l'API EndpointVolume. Questo fa parte delle nuove API audio rilasciate in Windows Vista e può essere utilizzato per ottenere o impostare il volume principale.
... C'è una libreria wrapper gestita completa disponibile su CodeProject: Controllo del volume principale dell'API audio Vista Core.


Grazie per il puntatore! Dovrò codificarlo da solo o forse conosci un piccolo strumento nato dalla domanda / risposta? Non ho mai toccato C # prima: se devo codificarlo da solo, c'è un compilatore disponibile gratuitamente?
peth

Nel peggiore dei casi dovrai scaricare Visual Studio C # Express, che è gratuito: microsoft.com/visualstudio/en-us/products/2010-editions/…
music2myear,

Ho trovato questa risposta solo mentre cercavo una soluzione alla tua domanda. Non ho portato avanti ulteriori ricerche per vedere se esiste un binario compilato già disponibile pubblicamente.
music2myear,

Questa ricerca su Google sembra avere qualche promessa: google.com/search?q=get+current+volume+by+command+line+windows
music2myear

2
Quello sembra essere orientato al C #. Se siete alla ricerca di una soluzione ish C ++ ', vedi stackoverflow.com/a/21056089/32453
rogerdpack

4

So che hai detto che non volevi una soluzione AutoHotkey, ma credo che l' API AutoHotkey abbia quello che stai cercando:

Non è necessario creare GUI o utilizzare i tasti di scelta rapida con AutoHotkey. Puoi scrivere potenti utility da riga di comando compilando uno .ahkscript. Detto questo, ti consigliamo di guardare il comando FileAppend per lavorare con stdout.


eccone uno che lo fa: gist.github.com/rdp/8363141 (anche se un'app console diretta potrebbe essere più semplice / più facile, vedi altri commenti qui)
rogerdpack

0

Il volume principale è archiviato nella posizione del registro:

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

Ad esempio, questo file REG imposta il volume principale su 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

Il nome della chiave potrebbe essere diverso. È necessario riavviare per rendere effettive le modifiche.

Potrebbe non essere possibile modificare o aprire il tasto Propertieso . Sebbene tu disponga delle autorizzazioni di accesso necessarie, potresti ricevere un errore come questo:{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]

Questo perché il nome della chiave è troppo lungo. Dovrai rinominare temporaneamente il nome della chiave lunga in un carattere e poi rinominarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.