我需要的
我正在寻找一个工具或脚本,允许我从命令行访问 Windows 音量级别。理想情况下,它允许我获取和设置所有音量,包括应用程序级别,但我只满足于获取,并且只获取主级别。我不介意它使用PowerShell
、、、、 Voodoo 或 Butterfly。任何解决方案都可以给我一个数字,我可以进一步处理以适应从 0% 到WMI
100 % 的范围。JavaScript
.Net
换句话说,提示部分就是我需要填充的黑匣子:
C:\> getvol master
50
甚至
C:\> wmic <alias> where "device='master' and name='volume'" get name,value
Name Value
Volume 0xDEADBEEF
如果可以免费使用工具,我并不介意花一些时间来包装它,甚至自己写一些东西。在后一种情况下,我需要一些核心的指针/概念验证,但我可以自己处理这些杂乱无章的东西。此外,我想避免仅仅为了这个目的而安装新的开发框架(请注意,music2myear's和iglvzx的给出了答案前我介绍了这些要求)。
作为“平台”,我有:
- Windows 7 Home Premium 附带的任何内容
- Cygwin 附带的任何内容
- Perl
- Python
- 红宝石
一般情况下,开源解决方案更受青睐。闭源工具也可以,只要它们是免费软件并且来源可信。商业解决方案不行。
我不需要什么
- 有几个相似的 问题主要处理音量设置。最重要的是,我需要得到音量,未设置。
- 有
nircmdc
,支持设置音量,但不支持获取音量。 - 我的注册表中有一个键[1],当我通过 GUI 混音器调整音量时,它的值会可预测地发生变化,但我猜想从该键读取数据在硬件更改或系统升级时很容易出现问题。除非我能相信该解决方案具有合理的前瞻性,否则我不会使用它。
- 网络上有
AutoHotKey
多种设置音量的解决方案,但 a) 它们也只适用于设置,更糟糕的是,b) 它们使用或自动鼠标移动来控制 GUI。自动化 GUI 不是一种选择。WSH
SendKeys
freenode 上的频道##windows
一如既往地没有帮助,Google 上充斥着各种黑客和不成熟的解决方法,我无法区分 WinAPI 调用和 Wiccan 咒语。
有谁知道办法吗?
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
答案3
您可以通过 Windows Core Audio API 获取 Windows 音量
pEndpointVolume->GetMasterVolumeLevelScalar(¤tVolume);
我已经为它编写了一个 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
答案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]
这是因为键名太长。您必须暂时将长键名重命名为一个字符,然后再重命名回来。