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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top