Как проверить равенство аудиосеансов
-
09-09-2020 - |
Вопрос
Я пытаюсь использовать Windows Audio Session API, чтобы найти аудиосессию по умолчанию в списке текущих аудиосессий.В настоящее время у меня есть ссылка на IAudioSessionControl
сеанса по умолчанию конечной точки рендеринга аудио в eConsole
роль, а также IAudioSessionEnumerator
объект, который перечисляет аудиосеансы этой конечной точки по умолчанию, но мне нужно иметь возможность сравнивать IAudioSessionControl
объект, который у меня есть для равенства с IAudioSessionControl
объекты, возвращенные IAudioSessionEnumerator::GetSession
.
Я надеялся, что смогу проверить на равенство, сравнив IAudioSessionControl
указатели на равенство.Это работает, когда я получаю IAudioSessionControl
для сеанса по умолчанию несколько раз, используя IAudioClient::GetService
.К сожалению, этот указатель, возвращенный IAudioClient::GetService
не отображается в перечислении аудиосеансов с помощью IAudioSessionEnumerator
.Кроме того, многократное получение аудиосеанса по умолчанию с помощью IAudioSessionManager::GetAudioSessionControl
маршрут не дает идентичных результатов IAudioSessionControl
указатели даже при использовании одного и того же GUID аудиосеанса (GUID_NULL
) и CrossProcessSession
ценность.
Как мне проверить равенство аудиосеансов при двух IAudioSessionControl
указатели?Возможно ли получить GUID аудиосеанса и идентификатор процесса данного IAudioSessionControl
возражать?
Решение
Посмотрите на IAudioSessionControl2::Получает идентификатор сеанса API, это то, что аудиоподсистема использует для сохранения сеансовых томов.Если вы хотите различать сеансы во время выполнения (два экземпляра одного и того же приложения, запущенные одновременно), проверьте GetSessionInstanceIdentifier - идентификатор сеанса API.
Другие советы
Единственное, с чем COM может вам здесь помочь, это требование к идентификации объекта.
Вы спрашиваете IUnknown*
из обоих объектов и сравните их.Если IUnknown*
из этих объектов один и тот же, это один и тот же объект, в противном случае это разные объекты.
Конечно, реализация может нарушать требование идентификации объекта, или эти различные объекты могут каким-то образом отображаться на один и тот же внутренний объект.COM не может помочь вам здесь - вы должны найти информацию, специфичную для реализации этого компонента.