gpt4 book ai didi

c# - 获取当前系统音量 (Windows 10)

转载 作者:可可西里 更新时间:2023-11-01 10:10:45 25 4
gpt4 key购买 nike

我想找到当前系统音量并在音量混合器中设置我的应用程序的音量,但似乎我找到的所有内容:

  • 可以更改系统音量(解决一个问题)
  • 不能改变申请量
  • 或者根本不起作用
  • 到目前为止,还没有什么可以设法获取我的系统音量

我们目前正在使用 nircmd 来设置全局音量,效果很好,但它似乎没有 GET 当前音量的选项,因此我们可以稍后将音量恢复到原来的状态。至于设置应用程序本身的值,而不是全局卷,我一直在寻找我能找到的每一个线程,所有的东西(在这里和其他地方)都让我找到 C++ 文档或围绕该库的 C# 包装器但是由于每个函数的根部的无效转换,该代码根本不起作用。

这是 stackoverflow 上的一个这样的损坏代码示例:Controlling Volume Mixer

我发现的所有这些库/代码示例在某个时候都这样做:

private static ISimpleAudioVolume GetVolumeObject(int pid)
{
IMMDeviceEnumerator deviceEnumerator =
(IMMDeviceEnumerator)(new MMDeviceEnumerator());

由于以下原因,这会导致无效转换问题:

internal class MMDeviceEnumerator
{
}
internal interface IMMDeviceEnumerator
{
}

它试图转换到的类没有实现接口(interface),因此转换显然是无效的。我尝试手动添加函数以使其实现接口(interface),但由于这只是一个 hack,它会导致其他错误,并且不是一个可行的选择。

此外,由于我在此处或其他地方找到的每个代码片段或库都做同样的事情,因此这种更改似乎不太可能被忽视。由于所有代码都已有多年历史,我可以假设这在 Win10 中根本不起作用吗?

如果是这样,那么我该如何做我提到的这两件事呢?

  • 找到当前系统音量和
  • 为每个连接的硬件设备设置当前应用程序的音量?

我还尝试获取 SndVol.exe 的应用程序进程并成功找到它(或者如果它未运行则打开它)但是一旦我有了混音器的句柄我不知道如何处理它。是否可以通过 Process 类可用的输入覆盖向应用程序发送命令?我对 Process 类完全没有经验,所以如果这个问题听起来很愚蠢,请原谅我。

编辑:我的问题很简单:如何使用 .NET 更改 Volume Mixer 中的各个 slider 。出于某种原因,人们将其阅读为“如何使用 Unity?”。出于这个原因,我想以另一种方式提出我的问题,希望它听起来不那么“深奥的魔法”,而是更多的“一般用例”(希望如此)......:P

假设我想检测系统连接的音频设备并在我的应用程序中添加一个下拉列表来列出这些设备,如果我想为每个正在运行的应用程序添加一个音量 slider 以便我可以针对该特定设备调整应用程序的音量在我自己的应用程序中,就像 Volume Mixer 一样......我将如何实现它?

更具体地说,我想知道的是如何将我的 slider 值应用于选定设备的单个应用程序的音量?

最佳答案

您需要使用 Win32 API 来执行此操作。 http://www.blackwasp.co.uk/BasicVolumeControl.aspx

https://learn.microsoft.com/en-gb/windows/win32/api/winuser/nf-winuser-get_appcommand_lparam

SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, value);

关于c# - 获取当前系统音量 (Windows 10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57372978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com