chrome com outlook identity outlook-object-model

com - chrome - ¿Cómo puedo decir de manera confiable que dos referencias de Inspector apuntan a la misma instancia del inspector?



seo 1 click (2)

[continuación de ¿Hay alguna forma de saber si dos referencias de interfaz COM apuntan a la misma instancia? ]

Tengo referencias a objetos Inspector de dos fuentes diferentes y necesito poder decir qué elemento de una fuente corresponde a qué elemento de la otra fuente. Sin embargo, ninguno de los enfoques que he podido desarrollar hasta ahora funcionó (de manera confiable):

  • No podía simplemente comparar las interfaces IUnknown ya que parece que el método Inspectors.Item() devuelve una referencia a un objeto proxy creado en el momento en lugar de la instancia del inspector en sí. Pruébelo: si accede al mismo índice dos veces obtendrá dos punteros distintos.

  • La comparación de Inspector.CurrentItem.EntryID tampoco es buena. Un EntryID elementos nuevos / no guardados siempre está en blanco y es posible que haya más de un elemento no guardado abierto a la vez.

  • Inspector.Caption or Inspector.CurrentItem.Subject es igualmente ambiguo.

  • Configurando temporalmente Inspector.CurrentItem.Subject (o cualquier otra propiedad del elemento realmente) a un valor inequívoco y luego buscar eso en el otro tipo de lista, pero tiene el molesto efecto secundario de marcar el elemento en el inspector como "sucio", es decir, al cerrar nuevamente el inspector se le pedirá al usuario que guarde el artículo (incluso si solo estaba viendo un correo recibido).

¿Alguna otra idea?

Contexto:

Estoy tratando de evitar la conocida falla / característica de que los nuevos mensajes de correo electrónico iniciados a través de Simple MAPI (por ejemplo, Enviar a> destinatario de correo en el menú contextual del Explorador) no generan un evento Inspectors.NewInspector lo que hace imposible agregar cualquier complemento funcionalidad para esos inspectores (por ejemplo, agregando botones de la barra de herramientas o ejecutando código en la creación de mensajes). En mi COM-addin tengo una lista interna de objetos envoltorios para atrapar Inspector -eventos. Los elementos se agregan y eliminan a esta lista mediante la supervisión de Inspectors.NewInspector e Inspector.Close events.

Como enfoque alternativo, estoy usando un anzuelo: ahora puedo recibir notificaciones cada vez que se crea o destruye una nueva ventana de inspector, por lo que parece ser un buen lugar para saltar y hacer coincidir mi lista interna de objetos de envoltura con la Application.Inspectors recopilación y agregue o elimine objetos envoltorios nuevos o huérfanos en consecuencia.


Ahora descubrí que comparar Inspector.CurrentItem.CreationTime era lo suficientemente confiable para mí.


También puede usar el operador Is para ver si dos referencias de objetos se refieren al mismo objeto.

Ex:

Debug.Print InspectorObj1 Is InspectorObj2

Esto imprimirá True en la Ventana Inmediata si ambas referencias se refieren al mismo Inspector.