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


17

我需要的

我正在寻找一种允许我从命令行访问Windows音量级别的工具或脚本。理想情况下,它将允许我获取和设置包括应用程序级别在内的所有卷,但是我只希望获取,并且只能满足主级别。如果它使用我不介意PowerShellWMIJavaScript.Net,巫术,或蝴蝶。任何能给我一个可以进一步处理以适应0%到100%范围的数字的解决方案都可以。

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

C:\> getvol master
50

甚至

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

我不介意我是否需要花一些时间来包装它,或者如果可以免费使用这样做的工具,甚至自己写东西。在后一种情况下,我需要为内核提供一些指针/概念验证,但我可以自己管理这些问题。我也想避免为此目的安装新的开发框架(请注意,介绍这些要求之前,已经给出了music2myeariglvzx的答案)。

作为“平台”,我可以使用:

  • Windows 7 Home Premium随附的所有内容
  • Cygwin附带的任何东西
  • 佩尔
  • 蟒蛇
  • 红宝石

通常,非常希望使用开源解决方案。只要是免费软件,并且可以信任来源,就可以使用封闭源工具。商业解决方案是行不通的。

我不需要的

  • 还有一些类似的 问题,主要涉及音量设置。最重要的是,我需要获取音量,而不是设置音量。
  • nircmdc,支持设置音量,但不支持设置音量。
  • 我的注册表中有一个键[1],当我通过GUI调音台调整音量时,该键的值可以预测地变化,但是我猜从该键读取的内容很容易在硬件更改或系统升级时损坏。除非我可以依靠该解决方案能够合理地面向未来,否则我将无法使用它。
  • AutoHotKeyWSH设置在网络上的大规模应用解决方案,但)他们也只用于设置好,更糟的是,B),他们使用SendKeys或自动鼠标移动来控制GUI。不能自动执行GUI。

##windowsfreenode上的频道一如既往地无济于事,Google充斥着黑客和半生半熟的变通办法,而且我无法告诉Wiccan咒骂的WinAPI调用。

有人知道吗?


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

WMI这样的Semms 不是一个选项 :(
Der Hochstapler


您需要我扩大答案吗?我不确定您是否需要更多,因为您似乎有编程经验。我可以提供一个示例,说明如何使用AutoHotkey轻松实现目标。
iglvzx 2012年

我认为这是一个很好的建议,再次感谢,但是AHK曾经咬过我一次,从那以后我一直很害羞。即使它是完全成熟的解决方案,我也可能不会使用它。但是,没有什么可以阻止您为将来的读者扩展/提供更多支持。:)
peth 2012年

1
(请注意,我的盒子上似乎根本不存在reg。,因此……它确实可能不稳定)。另请参阅我的C ++答案:stackoverflow.com/a/21056089/32453
rogerdpack 2014年

Answers:


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

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


感谢您的指导!我需要自己对此进行编码,还是您可能知道从问题/答案中衍生出来的一个小工具?我以前没有接触过C#:如果我必须自己编写代码,是否有免费的编译器可用?
peth 2012年

在最坏的情况,你需要下载Visual Studio的C#Express中,这是免费的:microsoft.com/visualstudio/en-us/products/2010-editions/...
music2myear

我只是在寻找问题的解决方案时找到了这个特定答案。我没有进行进一步的研究来查看是否已经有公开的编译二进制文件。
music2myear12年


2
那似乎是面向C#的。如果您正在寻找C ++选项,请参阅stackoverflow.com/a/21056089/32453
rogerdpack 2014年

4

我知道您说过您不想要AutoHotkey解决方案,但是我相信AutoHotkey API 可以满足您的需求:

您不需要创建GUI或将热键与AutoHotkey一起使用。您可以通过编译.ahk脚本来编写功能强大的命令行实用程序。话虽如此,您将需要查看FileAppend命令以使用stdout


这是一个做到这一点的工具:gist.github.com/rdp/8363141(虽然一个简单的控制台应用程序可能更简单/更容易,请在此处查看其他评论)
rogerdpack 2014年

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]

这是因为键名太长。您必须将长键名临时重命名为一个字符,然后将其重命名。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.