Cómo probar la igualdad de las sesiones de audio
-
09-09-2020 - |
Pregunta
Estoy intentando utilizar la API de sesión de audio de Windows para localizar la sesión de audio predeterminada dentro de la enumeración de sesiones de audio actuales.Actualmente tengo una referencia a la IAudioSessionControl
de la sesión predeterminada del punto final de procesamiento de audio en el eConsole
papel, así como un IAudioSessionEnumerator
objeto que enumera las sesiones de audio de este punto final predeterminado, pero necesito poder comparar las IAudioSessionControl
objeto que tengo para la igualdad con el IAudioSessionControl
objetos devueltos por IAudioSessionEnumerator::GetSession
.
Esperaba poder probar la igualdad comparando los IAudioSessionControl
Indicaciones para la igualdad.Esto funciona cuando obtengo el IAudioSessionControl
para la sesión predeterminada varias veces usando IAudioClient::GetService
.Desafortunadamente, este indicador fue devuelto por IAudioClient::GetService
no aparece en la enumeración de sesiones de audio por parte del IAudioSessionEnumerator
.Además, obtener la sesión de audio predeterminada varias veces a través del IAudioSessionManager::GetAudioSessionControl
la ruta no produce idéntica IAudioSessionControl
punteros incluso cuando se utiliza el mismo GUID de sesión de audio (GUID_NULL
) y CrossProcessSession
valor.
¿Cómo pruebo la igualdad de sesiones de audio dadas dos? IAudioSessionControl
punteros?¿Es posible obtener el GUID de la sesión de audio y el identificador de proceso de un determinado IAudioSessionControl
¿objeto?
Solución
Mira el IAudioSessionControl2::GetSessionIdentifier API, eso es lo que utiliza el subsistema de audio para conservar los volúmenes de sesión.Si desea distinguir sesiones en tiempo de ejecución (dos instancias de la misma aplicación ejecutándose al mismo tiempo), verifique la Obtener identificador de instancia de sesión API.
Otros consejos
Lo único en lo que COM puede ayudarle aquí es requisito de identidad del objeto.
Tu consulta IUnknown*
de ambos objetos y compararlos.Si IUnknown*
de esos objetos es el mismo, es el mismo objeto; de lo contrario, son objetos distintos.
Por supuesto, la implementación podría violar el requisito de identidad del objeto o esos objetos distintos podrían de alguna manera asignarse al mismo objeto interno.COM no puede ayudarlo aquí; debe encontrar información específica para la implementación de ese componente.