我想要找到当前系统音量并在音量混合器中设置我的应用程序的音量,但似乎我发现的所有东西都有以下问题:
- 可以 更改系统音量(一个问题解决)
- 不能 更改应用程序音量
- 或者根本不起作用
- 到目前为止,没有任何东西能够成功获取系统音量
我们目前正在使用nircmd来设置全局音量,这非常好,但它似乎没有选项可以GET当前音量,以便稍后将音量恢复到原来的状态。至于设置应用程序本身的值,而不是全局音量,我一直在寻找每个可能的线程,但我所找到的所有内容(包括此处以及其他地方)都引导我进入C ++文档或C#该库周围的包装器,但由于根本上每个函数的无效转换,该代码根本不起作用。
这里有一个来自stackoverflow的破碎代码示例:控制音量混音器
我发现所有这些库/代码示例都会做到这一点:
private static ISimpleAudioVolume GetVolumeObject(int pid)
{
IMMDeviceEnumerator deviceEnumerator =
(IMMDeviceEnumerator)(new MMDeviceEnumerator());
由于以下原因,会出现无效的类型转换问题:
此处存在问题:
internal class MMDeviceEnumerator
{
}
internal interface IMMDeviceEnumerator
{
}
它试图强制转换的类没有实现该接口,因此似乎转换无效。我试图手动添加函数来使其实现接口,但由于这只是一种hack,它会引起其他错误并且不可行。
此外,由于我在这里或其他地方找到的每个代码片段或库都执行的是完全相同的操作,因此似乎不太可能会注意到这样的更改。由于所有代码都是很多年前的,我能否假设在Win10中这根本行不通?
如果是这样,那么我如何才能完成我提到的这两件事?
1. 查找当前系统音量并 2. 设置当前应用程序每个附加硬件设备的音量?
我还尝试获取SndVol.exe的应用程序进程,并成功找到它(或者在未运行时打开它),但一旦我获得了混音器的句柄,我就不知道该怎么做了。是否可以通过Process类中提供的输入覆盖发送命令给应用程序?我对Process类完全没有经验,所以如果这个问题听起来很愚蠢,请原谅我。
编辑: 我的问题很简单:如何使用.NET更改“音量混合器”内的各个滑块。由于某些原因,人们将此解释为“如何使用Unity?”出于这个原因,我想以另一种方式提出我的问题,希望它听起来不那么“神秘”,而是更“普遍的使用情况”(希望如此)... :P
假设我想检测系统连接的音频设备并在我的应用程序中添加一个下拉列表,列出这些设备,如果我然后想为每个正在运行的应用程序添加音量滑块,以便我可以为该特定设备调整应用程序的音量,完全就像音量混合器所做的那样...我该如何实现?
更具体地说,我想知道的是如何将我的 滑块值应用于所选设备的各个应用程序的音量?