Jak uzyskać dostęp do poziomów głośności z wiersza poleceń w systemie Windows 7?


17

Czego potrzebuję

Szukam narzędzia lub skryptu, który pozwoli mi uzyskać dostęp do poziomów głośności systemu Windows z wiersza polecenia. Idealnie pozwoliłoby mi to uzyskać i ustawić wszystkie woluminy, w tym poziomy aplikacji, ale zadowoliłbym się tylko uzyskaniem i tylko poziomem głównym. Nie mam nic przeciwko, jeśli używa PowerShell, WMI, JavaScript, .Net, Voodoo, czy motyle. Każde rozwiązanie, które da mi tylko numer, który mogę dalej przetwarzać w celu dopasowania zakresu od 0% do 100%, wystarczy.

Innymi słowy, podpowiedzi to czarna skrzynka, którą muszę wypełnić:

C:\> getvol master
50

lub nawet

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

Nie przeszkadza mi to, że muszę poświęcić trochę czasu, aby to owinąć, a nawet sam napisać coś, jeśli narzędzia do tego są dostępne bezpłatnie. W tym drugim przypadku potrzebowałbym kilku wskaźników / proof-of-concept dla rdzenia, ale mogę samodzielnie zarządzać cruft. Chciałbym również unikać instalowania nowych ram programistycznych tylko w tym celu (zwróć uwagę, że odpowiedzi zarówno music2myear, jak i iglvzx zostały podane przed wprowadzeniem tych wymagań).

Jako „platformy” mam dostępne:

  • wszystko, co pochodzi z Windows 7 Home Premium
  • wszystko, co pochodzi z Cygwin
  • Perl
  • Pyton
  • Rubin

Zasadniczo preferowane są rozwiązania typu open source. Narzędzia z zamkniętym źródłem są w porządku, pod warunkiem, że są bezpłatne i źródłu można zaufać. Rozwiązań komercyjnych nie da się.

Czego nie potrzebuję

  • Istnieje kilka podobnych pytań, które w większości dotyczą ustawiania głośności. Przede wszystkim muszę uzyskać głośność, a nie ustawić.
  • Istnieje nircmdc, który obsługuje ustawianie głośności, ale nie jest uzyskiwanie.
  • W moim rejestrze jest klucz [1], który ma wartości, które zmieniają się przewidywalnie, kiedy dostosowuję głośność za pomocą miksera GUI, ale zgaduję, że czytanie tego klucza jest podatne na uszkodzenie przy zmianach sprzętowych lub aktualizacjach systemu. O ile nie mogę polegać na tym, że rozwiązanie jest wystarczająco przyszłościowe, nie mogę go użyć.
  • Istnieją AutoHotKeyi WSHrozwiązania do ustawiania głośności w Internecie, ale a) one także są dobre tylko do ustawienia, a co gorsza, b) używają SendKeyslub zautomatyzowanego ruchu myszy do sterowania GUI. Automatyzacja GUI nie jest opcją.

##windowsKanał na freenode jest nieprzydatny, jak zawsze, Google przepełnia hacki i połowiczne obejścia, a ja nie mogę powiedzieć wywołanie WinAPI z Wiccaninem inkantacji.

Czy ktoś zna sposób?


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

Semmy takie jak WMI nie są opcją :(
— Der Hochstapler


Czy potrzebujesz mnie, aby rozwinąć moją odpowiedź? Nie byłem pewien, czy potrzebujesz więcej, ponieważ wydaje ci się, że masz doświadczenie w programowaniu. Mogę podać przykład wykorzystania AutoHotkey do łatwego osiągnięcia celu.
— iglvzx

Myślę, że to bardzo dobra sugestia, jeszcze raz dziękuję, ale AHK ugryzł mnie raz i od tego czasu jestem nieśmiały. Prawdopodobnie nie użyłbym tego, nawet gdyby było to w pełni rozwinięte rozwiązanie. Jednak nic nie powstrzymuje Cię przed rozszerzeniem go o przyszłych czytelników / więcej pozytywnych opinii. :)
— peth

1
(jako uwaga, że ​​reg. nawet nie wydaje się istnieć na moim pudełku, więc ... może być rzeczywiście niestabilny). Zobacz także moją odpowiedź c ++ tutaj: stackoverflow.com/a/21056089/32453
— rogerdpack

Odpowiedzi:


5

To pytanie zostało zadane i udzielono odpowiedzi na StackOverflow: /programming/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

Odpowiedź: /programming//a/4640225/704977

Szukasz interfejsu API EndpointVolume. Jest to część nowych interfejsów API audio, które zostały wydane w systemie Windows Vista, i można go użyć do uzyskania lub ustawienia głośności głównej.
... W CodeProject dostępna jest kompletna zarządzana biblioteka opakowań: Vista Core Audio API Master Volume Control.


Dzięki za wskaźnik! Czy będę musiał to kodować sam, czy może znasz małe narzędzie, które wyszło z pytania / odpowiedzi? Nie dotknąłem wcześniej C #: jeśli muszę go sam kodować, czy jest dostępny kompilator?
— peth

W najgorszym przypadku musisz pobrać program Visual Studio C # Express, który jest bezpłatny: microsoft.com/visualstudio/en-us/products/2010-editions/…
— music2myear

Znalazłem tę konkretną odpowiedź tylko podczas szukania rozwiązania twojego pytania. Nie prowadziłem dalszych badań, aby sprawdzić, czy skompilowany plik binarny jest już publicznie dostępny.
— music2myear

Wygląda na to, że to wyszukiwanie w Google ma pewne obietnice: google.com/search?q=get+current+volume+by+command+line+windows
— music2myear

2
Ten wydaje się być zorientowany na C #. Jeśli szukasz opcji C ++ ', zobacz stackoverflow.com/a/21056089/32453
— rogerdpack

4

Wiem, że powiedziałeś, że nie chcesz rozwiązania AutoHotkey, ale wierzę, że API AutoHotkey ma to, czego szukasz:

Nie musisz tworzyć GUI ani używać skrótów klawiszowych z AutoHotkey. Możesz pisać potężne narzędzia wiersza poleceń, kompilując .ahkskrypt. To powiedziawszy, będziesz chciał spojrzeć na komendę FileAppend do pracy stdout.


oto jeden, który to robi: gist.github.com/rdp/8363141 (chociaż prosta aplikacja na konsolę może być prostsza / łatwiejsza, zobacz inne komentarze tutaj)
— rogerdpack

0

Wolumin główny jest przechowywany w lokalizacji rejestru:

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

Na przykład ten plik REG ustawia głośność główną na 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

Nazwa klucza może się różnić. Musisz ponownie uruchomić, aby zmiany odniosły skutek.

Edycja lub otwieranie klawisza Propertieslub może być niemożliwe . Chociaż masz niezbędne uprawnienia dostępu, może pojawić się taki błąd:{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]

Jest tak, ponieważ nazwa klucza jest za długa. Będziesz musiał tymczasowo zmienić nazwę długiego klucza na jeden znak, a następnie zmienić jego nazwę z powrotem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.