You need to enable JavaScript to run this app. 如何通过Windows API获取现有音频会话的GUID实现音量控制
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Windows API获取现有音频会话的GUID实现音量控制

基于Windows音频API开发简易混音应用的会话音量控制实现疑问

当前开发进展

  • 已掌握IAudioSessionEnumerator与IAudioSessionControl接口的获取方法,可正常读取各个音频会话的DisplayName字段
  • 下一阶段计划为枚举到的所有音频会话实现独立的音量读写控制功能

核心问题

查阅WinAPI文档后判断,实现会话级音量控制需要调用GetSimpleAudioVolume方法,但该方法要求传入会话GUID作为入参。目前从官方文档、公开技术资料中均未找到获取已存在会话GUID的对应方案,也无法确认自身对接口调用流程的理解是否存在偏差。

现有可正常运行的代码

以下代码可实现遍历输出所有会话DisplayName的功能:

//code prints DisplayNames of all sessions
void getSessions() {

    CoInitialize(NULL);

    IMMDeviceEnumerator *pDEnumerator = NULL;
    CoCreateInstance(CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&pDEnumerator);

    IMMDevice *pDevice = NULL;
    pDEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &pDevice);

    IAudioSessionManager2 *pSManager2 = NULL;
    pDevice->Activate(IID_IAudioSessionManager2, CLSCTX_ALL, NULL, (void**)&pSManager2);

    IAudioSessionEnumerator *pSEnumerator = NULL;
    pSManager2->GetSessionEnumerator(&pSEnumerator);

    int audioSessionCount;
    pSEnumerator->GetCount(&audioSessionCount);

    std::cout << audioSessionCount << '\n';

    for (int i = 0; i < audioSessionCount; ++i) {
        IAudioSessionControl *controls;
        pSEnumerator->GetSession(i, &controls);
        LPWSTR name;
        controls->GetDisplayName(&name);
        while (*name != 0) {
            std::wcout << *name;
            ++name;
        }
        std::cout << '\n';
    }
}

内容的提问来源于stack exchange,提问作者Light Steel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.11 10:36:07