【问题标题】:How to use windows.h in C/C++ to control other programs' volume control如何在C/C++中使用windows.h来控制其他程序的音量控制
【发布时间】:2021-09-15 05:29:32
【问题描述】:

我正在寻找一种方法,能够在不使用音量混合器但使用 C/C++ 代码的情况下控制不同程序的音量。我知道windows.h 库应该可以做到。但它很大,我什至不知道从哪里开始。

我已经发现 nircmd 完全符合我的需要:

nircmd setappvolume chrome.exe 0.15

虽然我可以使用该命令,但我想编写自己的命令并使用硬件设备来控制这些卷。

如果有人有一些链接或提示可以帮助我入门,我将不胜感激!

编辑:

我现在在 C 语言中使用了 system()nircmd,效果很好。这段代码只是使用一个 sinus 将音量从 50% 变为 100% 和 0%。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {

    char command[100];
    char appName[] = "chrome.exe";
    int i = 0;

    while(1){
        i++;
        sprintf(command, "nircmd setappvolume %s %f", appName, sin(i/10.0)/2+0.5);                        
        printf("%d %% \n", i);
        system(command);
    }
}

【问题讨论】:

  • 不幸的是,没有公共 API 可以做到这一点。您唯一可以设置的是主音量。
  • 是的,这正是我在研究中发现的。但是发现 nircmd 有效,我认为它应该是可能的。
  • 是的,他们一定做了一些逆向工程。也许您可以在注册表中设置一些键 - 毕竟,这些音量设置必须存储在某个地方。
  • 谢天谢地 nircmd 有一个相当开放的许可证。所以我只会将它用于我的程序。

标签: c++ c windows


【解决方案1】:

微软有 WASPI 用于控制各种客户端和输出设备的音量。

您获得客户端的IAudioVolumeLevel 接口,并使用SetLevel 操作每个通道。

你可能需要IMMDeviceEnumeratorIDeviceTopologyIAudioSessionControl2ISimpleAudioVolume和其他接口来做你想做的事。

所以,这是可能的,它已被记录在案,但它并非微不足道。

https://docs.microsoft.com/en-us/windows/win32/coreaudio/wasapi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    相关资源
    最近更新 更多