[英]Get Current System Volume (Windows 10)
我想找到当前的系统音量并在音量混合器中设置我的应用程序的音量,但似乎我找到的一切:
我们目前正在使用 nircmd 来设置全局卷并且效果很好,但它似乎没有获取当前卷的选项,因此我们以后可以将卷恢复到原来的状态。 至于设置应用程序本身的价值,而不是全局量,我一直在寻找我能找到的每一个线程和所有东西(在这里以及其他地方)都引导我找到 C++ 文档或围绕该库的 C# 包装器但是由于每个函数根部的无效强制转换,该代码根本不起作用。
这是 stackoverflow 上的一个损坏代码示例: Controlling Volume Mixer
我发现的所有这些库/代码示例都在某个时候这样做:
private static ISimpleAudioVolume GetVolumeObject(int pid)
{
IMMDeviceEnumerator deviceEnumerator =
(IMMDeviceEnumerator)(new MMDeviceEnumerator());
由于此原因,这会产生无效的强制转换问题:
internal class MMDeviceEnumerator
{
}
internal interface IMMDeviceEnumerator
{
}
它试图转换到的类没有实现接口,因此转换显然是无效的。 我尝试手动添加函数以使其实现接口,但由于这只是一个 hack,它会导致其他错误,并且不是一个可行的选择。
此外,由于我在这里或其他地方找到的每个代码片段或库都做了完全相同的事情,因此这种变化似乎不太可能被忽视。 由于所有代码已经很多年了,我可以假设这在 Win10 中根本不起作用吗?
如果是这样,那么我该怎么做我提到的那两件事?
我还尝试为 SndVol.exe 获取应用程序进程并成功找到它(如果它没有运行,则将其打开),但是一旦我获得了混音器的句柄,我就不知道如何处理它。 是否可以通过 Process 类提供的输入覆盖向应用程序发送命令? 我对 Process 课程完全没有经验,所以如果这个问题听起来很愚蠢,请原谅我。
编辑:我的问题很简单:如何使用 .NET 更改 Volume Mixer 中的各个滑块。 出于某种原因,人们将其读作“如何使用 Unity?”。 出于这个原因,我想以另一种方式提出我的问题,希望能让它听起来不那么“深奥的魔法”和更多的“一般用例”(希望如此)......:P
假设我想检测系统连接的音频设备,并在我的应用程序中添加一个下拉列表,列出这些设备,如果我想为每个正在运行的应用程序添加一个音量滑块,这样我就可以从我的内部调整该特定设备的应用程序音量自己的应用程序,就像 Volume Mixer 一样......我将如何实现它?
更具体地说,我想知道的是如何将我的滑块值应用于所选设备的单个应用程序的音量?
您需要使用 Win32 API 来执行此操作。 http://www.blackwasp.co.uk/BasicVolumeControl.aspx
https://docs.microsoft.com/en-gb/windows/win32/api/winuser/nf-winuser-get_appcommand_lparam
SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, value);
https://github.com/naudio/NAudio
这个库包含我需要的所有功能! 它还包含一个演示,它完全符合我在我编辑过的原始帖子中发布的内容......让我可以访问每个音频设备,在下拉列表中列出它,显示所选设备的每个应用程序的音量,并允许我最终获取音频音量(到目前为止,由于某种原因,这似乎是不可能的)。
编译源代码真的很痛苦,因为在使用 F#(我不知道)修复假安装程序之前,您需要安装并更新 FAKE 下载依赖项的每一步......在您最终构建您的 dll 之前需要构建演示......但是下载二进制文件并将dll放在我的插件文件夹中效果很好! :D
使用演示源作为如何使用 DLL 的指南,然后一切顺利!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.