Как я могу получить доступ к уровням громкости из командной строки в Windows 7?


17

Что мне нужно

Я ищу инструмент или сценарий, который позволяет мне получить доступ к уровням громкости Windows из командной строки. В идеале это позволило бы мне получить и установить все тома, включая уровни приложений, но я бы согласился только на получение и только на основной уровень. Я не возражаю , если он использует PowerShell, WMI, JavaScript, .Net, вуду, или бабочки. Подойдет любое решение, которое просто даст мне число, которое я могу обработать в диапазоне от 0% до 100%.

Другими словами, подсказки - это черный ящик, который мне нужно заполнить:

C:\> getvol master
50

или даже

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

Я не против, если мне придется потратить некоторое время, чтобы обернуть это или даже написать что-нибудь сам, если инструменты для этого доступны бесплатно. В последнем случае мне понадобится несколько указателей / доказательств концепции ядра, но я могу справиться с этим самостоятельно. Также я бы не хотел устанавливать новые фреймворки для разработки как раз для этой цели (обратите внимание, что ответы на music2myear и iglvzx были даны до того, как я ввел эти требования).

В качестве «платформ» у меня есть в наличии:

  • все, что поставляется с Windows 7 Home Premium
  • все, что идет с Cygwin
  • Perl
  • питон
  • Рубин

Как правило, решения с открытым исходным кодом очень предпочтительны. Инструменты с закрытым исходным кодом в порядке, если они бесплатны и источнику можно доверять. Коммерческие решения не принимаются.

Что мне не нужно

  • Есть несколько похожих вопросов, которые в основном касаются настройки громкости. Больше всего мне нужно получить громкость, а не установить.
  • Есть nircmdc, который поддерживает настройку громкости, но не получение.
  • В моем реестре есть ключ [1], значения которого меняются предсказуемо, когда я настраиваю громкость через микшер с графическим интерфейсом, но я предполагаю, что чтение с этого ключа может привести к поломке аппаратных изменений или обновлений системы. Если я не могу полагаться на то, что решение будет достаточно перспективным, я не смогу его использовать.
  • Существуют AutoHotKeyи WSHрешения для настройки громкости в сети, но а) они тоже хороши только для настройки и, что еще хуже, б) они используют SendKeysили автоматическое движение мыши для управления графическим интерфейсом. Автоматизация графического интерфейса не вариант.

##windowsКанал на Freenode не приносит никакой пользы , как всегда, Google переполняется писак и незрелых обходные, и я не могу сказать WinAPI звонок от Викки заклинанием.

Кто-нибудь знает способ?


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

Семс вроде WMI не вариант :(
Der Hochstapler

Возможно актуально: superuser.com/questions/284527/…
Der Hochstapler

Вы нуждаетесь во мне, чтобы расширить мой ответ? Я не был уверен, что вам нужно больше, так как у вас, похоже, есть опыт программирования. Я могу привести пример того, как вы можете использовать AutoHotkey, чтобы легко достичь своей цели.
iglvzx

Я думаю, что это очень хорошее предложение, спасибо еще раз, но AHK укусил меня однажды, и с тех пор я стесняюсь. Я бы, наверное, не использовал бы его, даже если бы это было полноценное решение. Ничто не мешает вам расширить его для будущих читателей / больше голосов, хотя. :)
Peth

1
(как примечание, что reg., кажется, даже не существует на моей коробке, так что ... это может быть действительно нестабильно). Смотрите также мой ответ на C ++ здесь: stackoverflow.com/a/21056089/32453
rogerdpack

Ответы:


5

Этот вопрос задавали и отвечали на StackOverflow: /programming/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

Ответ: /programming//a/4640225/704977

Вы ищете API EndpointVolume. Это часть новых аудио API, которые были выпущены в Windows Vista, и его можно использовать для получения или установки мастер-громкости.
... В CodeProject доступна полная управляемая библиотека-обертка: Vista Core Audio API Master Volume Control.


Спасибо за указатель! Придется ли мне это самому кодировать, или вы знаете какой-нибудь небольшой инструмент, возникший из вопроса / ответа? Я не касался C # раньше: если мне придется самому кодировать его, есть ли свободно доступный компилятор?
Пет

В худшем случае вам нужно скачать Visual Studio C # Express, которая бесплатна: microsoft.com/visualstudio/en-us/products/2010-editions/…
music2myear

Я нашел этот конкретный ответ только во время поиска решения вашего вопроса. Я не проводил дальнейших исследований, чтобы увидеть, есть ли уже скомпилированный двоичный файл, доступный публично.
music2myear

Похоже, у этого поиска Google есть некоторые обещания: google.com/search?q=get+current+volume+by+command+line+windows
music2myear

2
Этот, кажется, ориентирован на C #. Если вы ищете для C ++ 'иш опции см stackoverflow.com/a/21056089/32453
rogerdpack

4

Я знаю, вы сказали, что вам не нужно решение AutoHotkey, но я считаю, что API AutoHotkey имеет то, что вы ищете:

Вам не нужно создавать GUI или использовать горячие клавиши с AutoHotkey. Вы можете написать мощные утилиты командной строки, скомпилировав .ahkскрипт. Тем не менее, вы захотите посмотреть на команду FileAppend для работы с stdout.


Вот кто это делает: gist.github.com/rdp/8363141 (хотя прямое консольное приложение для него может быть проще / проще, см. другие комментарии здесь)
rogerdpack

0

Основной том хранится в папке реестра:

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

Например, этот REG-файл устанавливает основной объем на 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

Название ключа может отличаться. Вам нужно перезапустить, чтобы изменения вступили в силу.

Вы не можете быть в состоянии изменить или открыть Propertiesили {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]

Это потому, что имя ключа слишком длинное. Вам придется временно переименовать длинное имя ключа в один символ, а затем переименовать его обратно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.