我希望找到当前的系统卷,并在卷混频器中设置我的应用程序的音量,但似乎我找到的所有内容:
我们目前正在使用nircmd来设置全局卷,这很好,但是它似乎没有获得当前卷的选项,因此我们以后可以将卷恢复到原来的状态。至于设置应用程序本身的值,而不是全局卷,我一直在搜索我能找到的每一个线程,所有的东西(这里和其他地方)都会引导我找到C++文档或那个库周围的C#包装器,但是由于每个函数根部的无效强制转换,代码根本无法工作。
下面是堆栈溢出上的中断代码的一个这样的示例:Controlling Volume Mixer
我发现的所有libs/代码示例在某个时候都会这样做:
private static ISimpleAudioVolume GetVolumeObject(int pid)
{
IMMDeviceEnumerator deviceEnumerator =
(IMMDeviceEnumerator)(new MMDeviceEnumerator());这会产生无效的强制转换问题,原因是:
internal class MMDeviceEnumerator
{
}
internal interface IMMDeviceEnumerator
{
}它试图转换的类没有实现接口,因此强制转换显然是无效的。我尝试手动添加函数以使其实现接口,但由于这只是一次黑客攻击,因此会导致其他错误,因此不是可行的选择。
此外,由于我在这里或其他地方找到的所有代码片段或库都做了同样的事情,这样的更改似乎不太可能被忽略。因为所有的代码都有很多年的历史了,我可以假设这在Win10中根本不起作用吗?
如果是的话,那我怎么做我刚才提到的两件事呢?
我还尝试为SndVol.exe获取应用程序进程,并成功地找到它(如果它没有运行,就打开它),但是一旦我有了混频器的句柄,我就不知道该如何处理它了。是否可以通过Process类提供的输入覆盖向应用程序发送命令?我对过程课完全没有经验,所以如果这个问题听起来很愚蠢,请原谅我。
编辑:--我的问题很简单:如何更改卷混合器using.NET中的单个滑块。出于某种原因,人们把它读成“如何使用统一”。因此,我想提出我的问题,希望它听起来不那么“深奥的魔法”,而更多的“通用用例”(希望).:P
假设我想检测系统附加的音频设备,并在我的应用程序中添加一个下拉列表,列出这些设备,如果我想为每个正在运行的应用程序添加一个卷滑块,那么我就可以在我自己的应用程序中为该特定设备调整应用程序的音量,就像卷混合器所做的那样。我该如何实现这一点呢?
更具体地说,我想知道的是如何将滑块值应用到所选设备的单个应用程序的卷中?
发布于 2019-08-06 09:35:24
您需要使用Win32 API来完成此操作。http://www.blackwasp.co.uk/BasicVolumeControl.aspx
SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, value);发布于 2019-08-07 03:32:20
https://github.com/naudio/NAudio
这个库包含了我需要的所有功能!它还包含了一个演示程序,它做了我在编辑后的文章中发布的内容.允许我访问每个音频设备,在下拉列表中列出它,显示所选设备的每个应用程序的音量,并允许我最终获得音频音量(由于某种原因,到目前为止,这似乎是不可能的)。
编译源代码是一件很痛苦的事情,因为您需要在使用F# (我不知道)下载依赖关系的每一步之前安装并更新假冒伪劣的安装程序。在您最终构建需要构建演示的dll之前..。但是,下载二进制文件并在我的Plugins文件夹中删除dll非常有效!:D
使用演示源代码作为指导如何使用DLL,这一切都是一帆风顺的!
https://stackoverflow.com/questions/57372978
复制相似问题