Example #1
0
void AudioVolume::AddSession(std::map<DWORD, DWORD> &map, CComQIPtr<IAudioSessionControl> spAudioSessionControl)
{
    HRESULT hr = S_OK;
    CComQIPtr<IAudioSessionControl2> spAudioSessionControl2;
    try
    {
        // Get AudioSessionControl2
        spAudioSessionControl2 = spAudioSessionControl;
        if (spAudioSessionControl2 == NULL)
        {
            throw "Cannot get AudioSessionControl2!";
        }

        // Check if it is the firfox's audio session
        DWORD dwProcessId;
        hr = spAudioSessionControl2->GetProcessId(&dwProcessId);
        if (FAILED(hr))
        {
            throw "spAudioSessionControl2->GetProcessId failed!";
        }
        LPWSTR pswSessionName = NULL;
        hr = spAudioSessionControl->GetDisplayName(&pswSessionName);
        if (FAILED(hr))
        {
            throw "spAudioSessionControl->GetDisplayName failed!";
        }
        if (IsDescendantProcess(map, dwProcessId) || IsQzoneMusicProcess(dwProcessId))
        {
            LPWSTR pswInstanceId = NULL;
            if (SUCCEEDED(spAudioSessionControl2->GetSessionInstanceIdentifier(&pswInstanceId)))
            {
                m_mapSpAudioSessionControl2[CStringW(pswInstanceId)] = spAudioSessionControl;
            }
            CoTaskMemFree(pswInstanceId);
        }

        CoTaskMemFree(pswSessionName);
    }
    catch (LPCSTR szError)
    {
        TRACE("[MuterWin7] AudioVolume::AddSession: %s\n", szError);
    }
}