如何从 Windows 7 上的命令行访问音量级别?

如何从 Windows 7 上的命令行访问音量级别?

我需要的

我正在寻找一个工具或脚本,允许我从命令行访问 Windows 音量级别。理想情况下,它允许我获取和设置所有音量,包括应用程序级别,但我只满足于获取,并且只获取主级别。我不介意它使用PowerShell、、、、 Voodoo 或 Butterfly。任何解决方案都可以给我一个数字,我可以进一步处理以适应从 0% 到WMI100 % 的范围。JavaScript.Net

换句话说,提示部分就是我需要填充的黑匣子:

C:\> getvol master
50

甚至

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

如果可以免费使用工具,我并不介意花一些时间来包装它,甚至自己写一些东西。在后一种情况下,我需要一些核心的指针/概念验证,但我可以自己处理这些杂乱无章的东西。此外,我想避免仅仅为了这个目的而安装新的开发框架(请注意,music2myear'siglvzx的给出了答案我介绍了这些要求)。

作为“平台”,我有:

  • Windows 7 Home Premium 附带的任何内容
  • Cygwin 附带的任何内容
  • Perl
  • Python
  • 红宝石

一般情况下,开源解决方案更受青睐。闭源工具也可以,只要它们是免费软件并且来源可信。商业解决方案不行。

我不需要什么

  • 有几个相似的 问题主要处理音量设置。最重要的是,我需要得到音量,未设置。
  • nircmdc,支持设置音量,但不支持获取音量。
  • 我的注册表中有一个键[1],当我通过 GUI 混音器调整音量时,它的值会可预测地发生变化,但我猜想从该键读取数据在硬件更改或系统升级时很容易出现问题。除非我能相信该解决方案具有合理的前瞻性,否则我不会使用它。
  • 网络上有AutoHotKey多种设置音量的解决方案,但 a) 它们也只适用于设置,更糟糕的是,b) 它们使用或自动鼠标移动来控制 GUI。自动化 GUI 不是一种选择。WSHSendKeys

freenode 上的频道##windows一如既往地没有帮助,Google 上充斥着各种黑客和不成熟的解决方法,我无法区分 WinAPI 调用和 Wiccan 咒语。

有谁知道办法吗?


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

答案1

这个问题在 StackOverflow 上被提出并被回答:https://stackoverflow.com/questions/4640106/how-to-get-current-volume-of-system-sound-device-in-windows-7

答案:https://stackoverflow.com/a/4640225/704977

您正在寻找 EndpointVolume API。这是 Windows Vista 中发布的新音频 API 的一部分,可用于获取或设置主音量。...
CodeProject 上有一个完整的托管包装器库:Vista Core Audio API 主音量控制。

答案2

我知道你说过你不想要 AutoHotkey 解决方案,但我相信自动热键API 有您正在寻找的内容:

您无需创建 GUI 或使用 AutoHotkey 的热键。您可以通过编译脚本来编写功能强大的命令行实用程序.ahk。话虽如此,您需要查看文件追加用于处理的命令stdout

答案3

您可以通过 Windows Core Audio API 获取 Windows 音量

pEndpointVolume->GetMasterVolumeLevelScalar(&currentVolume);

我已经为它编写了一个 C++ 程序,你可以直接从命令行使用它音量调节程序

用法:

# Get current sound volume
./adjust-volume.exe
# Output: Current sound volume: 0.1

# Set current sound volume to 0.2
./adjust-volume.exe .2

回购:
https://github.com/WingTillDie/adjust-volume

答案4

主卷存储在注册表位置:

...\#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]

这是因为键名太长。您必须暂时将长键名重命名为一个字符,然后再重命名回来。

相关内容