16

Что мне нужно

Я ищу инструмент или сценарий, который позволяет мне получить доступ к уровням громкости Windows из командной строки. В идеале это позволило бы мне получить и установить все тома, включая уровни приложений, но я бы согласился только на получение и только на основной уровень. Я не против, если он использует PowerShell , WMI , JavaScript , .Net , Voodoo или бабочки. Подойдет любое решение, которое просто даст мне число, которое я смогу обработать в диапазоне от 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 от заклинания Wiccan.

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


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

3 ответа3

5

Этот вопрос был задан и получен ответ на StackOverflow: https://stackoverflow.com/questions/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

Ответ: https://stackoverflow.com/a/4640225/704977

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

4

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

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

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]

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .