Como posso acessar os níveis de volume a partir da linha de comando no Windows 7?

16

O que eu preciso

Estou procurando uma ferramenta ou um script que me permita acessar os níveis de volume do Windows na linha de comando. Idealmente, permitir-me-ia obter e definir todos os volumes, incluindo os níveis de aplicação, mas me contentaria apenas em obter, e apenas no nível principal. Eu não me importo se ele usa PowerShell , WMI , JavaScript , .Net , Voodoo ou borboletas. Qualquer solução que me forneça um número que eu possa processar para se ajustar a um intervalo de 0% a 100%.

Em outras palavras, as partes prontas são a caixa preta que eu preciso preencher:

C:\> getvol master
50

ou até mesmo

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

Eu não me importo se eu tiver que gastar algum tempo para envolvê-lo ou mesmo escrever algo, se as ferramentas para isso estiverem disponíveis gratuitamente. Neste último caso, eu precisaria de alguns ponteiros / prova de conceito para o núcleo, mas eu posso gerenciar o lixo por conta própria. Também gostaria de evitar a instalação de novos frameworks de desenvolvimento apenas para esse propósito (note que music2myear e

  • as respostas foram dadas antes eu introduzi estes requisitos).

    Como "plataformas", tenho disponível:

    • qualquer coisa que venha com o Windows 7 Home Premium
    • qualquer coisa que venha com o Cygwin
    • Perl
    • Python
    • Ruby

    Geralmente, as soluções de código aberto são muito preferidas. As ferramentas de código fechado estão ok, desde que sejam freeware e a fonte seja confiável. Soluções comerciais são proibidas.

    O que eu não preciso

    • Existem alguns semelhantes questions que principalmente lidar com a definição do volume. Acima de tudo, preciso obter o volume, não definido.
    • Existe nircmdc , que suporta a definição do volume, mas não o consegue.
    • Existe uma chave [1] no meu registro que tem valores que mudam de forma previsível quando eu ajustei o volume através do mixer da GUI, mas eu acho que a leitura dessa tecla é propensa a quebra em alterações de hardware ou atualizações do sistema. A menos que eu possa confiar que a solução é razoavelmente à prova de futuro, não posso usá-la.
    • Existem AutoHotKey e WSH soluções para definir o volume na Web, mas a) elas também são boas para configuração e, pior, b) usam SendKeys ou movimento automatizado do mouse para controlar a GUI . Automatizar a GUI não é uma opção.

    O canal ##windows no freenode é inútil como sempre, o Google transborda com hacks e soluções alternativas incompletas, e não posso dizer uma chamada WinAPI de um encantamento wiccaniano.

    Alguém sabe de uma maneira?

    1. HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}%code%00\MixerSettings\eLineOutTopo\PrimaryNode000
  • por peth 28.02.2012 / 15:42

    3 respostas

    5

    Esta pergunta foi feita e respondida no StackOverflow: link

    A resposta: link

    You're looking for the EndpointVolume API. This is part of the new audio APIs that were released in Windows Vista, and it can be used to get or set the master volume.
    ... There's a complete managed wrapper library available on CodeProject: Vista Core Audio API Master Volume Control.

        
    por 28.02.2012 / 15:59
    4

    Eu sei que você disse que não queria uma solução AutoHotkey, mas acredito que a API AutoHotkey tenha o que você está procurando:

    Você não precisa criar GUIs ou usar teclas de atalho com o AutoHotkey. Você pode escrever poderosos utilitários de linha de comando compilando um script .ahk . Dito isto, você vai querer olhar para o comando FileAppend para trabalhar com stdout .

        
    por 29.02.2012 / 21:57
    0

    O volume principal é armazenado no local do registro:

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

    Por exemplo, este arquivo REG define o volume principal como 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}000]
    @=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
    

    O nome da chave pode ser diferente. Você precisa reiniciar para que as alterações entrem em vigor.

    Você pode não conseguir editar ou abrir a chave Properties ou {7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc} em regedit . Embora você tenha as permissões de acesso necessárias, você pode receber um erro como este:

    [Window Title]
    Error Opening Key
    
    [Content]
    {7fb7b48f-531d-44a2-bcb3-5ad5a134b3dc} cannot be opened.
    An error is preventing this key from being opened.
    
    [OK]
    

    Isso ocorre porque o nome da chave é muito longo. Você terá que renomear temporariamente o nome da chave longa para um caractere e renomeá-lo novamente.

        
    por 03.12.2015 / 16:02