Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Como obtener multiples instancias de un objeto Ole (https://www.clubdelphi.com/foros/showthread.php?t=60345)

Fistandantilus 29-09-2008 15:11:35

Como obtener multiples instancias de un objeto Ole
 
Wenas a todos.
Desde hace ya unos dias q me estoy rompiendo la cabeza con este tema y no encuentro nada... :(

Lo que nesecito es obtener un listado de todas instancias iniciadas de un objeto Ole. Yo por el momento para adjuntarme a una instacia uso CoCreateInstance, pero esta funcion solo sirve para la 1er instacia iniciada, pero kiero adjuntarme a todas! :D

Por ejemplo si uno kiere adjuntarse al IE uno posee el objeto TShellWindows por el cual uno puede objeter la cantidad de instancias y obtener cada una de ellas para hacer un "Invoke" y poder usarlas a todas(en caso de q sea necesario). Pero las Funciones TShellWindows.Count y TShellWindows.Item() son funciones propias de la interfase "IShellWindows" y hay interfaces que no proveen esas 2 funciones o no tienen verdadera funcionalidad( sino todo seria mas facil ;)).

Desde ya muchas gracias

cHackAll 01-10-2008 01:35:17

Estoy un poco confundido; CoCreateInstance sirve para crear una nueva instancia de una clase asociada a su CLSID, y no como tu dices “adjuntarte” a una instancia, por ello mi comentario pues en realidad me pierdo en los conceptos y por ende en lo que quieres hacer.

Ahora es bien sabido que la interfaz base de cualquier OLE-COM es IUnknown, talvez por el lado de la interfaz IEnumUnknown.

Talvez si nos cuentas a mayor detalle el escenario y el motivo y clase que quieres “enumerar” :rolleyes:

Saludos

Fistandantilus 02-10-2008 14:27:12

Yo me refiero en adjuntarme a una instancia ya que los datos que puedo accerder por medio de la interface devuelta por CoCreateInstance son enrealidad de otra instancia y no de la mia.
mmm como explicarme de otra manera... lo que nesecito es algo lo mas generico posible en que dada una interfase determinada uno pueda obtener todas las instancias creada de esa interface.
Por ej: Tengo 3 IE abiertos y 1 ventana explorando alguna carpeta.
entonces por medio del CLSID/GUID(no se la dif) del IE ( creo q es {EAB22AC1-30C1-11CF-A7EB-0000C05BAE0B} IWebBrowser ) me retorne el accesso a las 4 instancias creadas del IE. O asi como le doy el CLSID/GUID del IE le pueda dar de cualquier otra interface.

cHackAll 03-10-2008 02:18:33

No quiero alarmarte pero no entiendo :D

A ver... tomemos algun otro ejemplo; digamos que tenemos 3 instancias de un MSXML.DOMDocument que contienen las contraseñas de usuario de unas cuentas de usuario manejadas por un Servicio X... lo que tu quisieras (para dar un ejemplo vago), es poder obtener dichas instancias y (por ejemplo) leer las contraseñas de dichas cuentas..... esta bien mi ejemplo? :rolleyes:

Saludos

Fistandantilus 10-10-2008 01:38:53

Disculpa de ante mano la tardanza de la respuesta, estaba con mucho laburo.
Depende... Depende de la interface. Hay interfaces por cuales se puede sacar información de la interface ya instanciada y otras q no...
Yo di el ejemplo del IE ya que con esta si se puede, por ende con el objeto TShellWindows uno tiene accesso a todas las instancias del IE y tambien a toda información que provee la interface IWebbrowser2( el cual se puede usar para obtener los eventos :) ). TShellWIndows es un objeto creado en base de la interface IShellWindows( no heredada de esta ), esta interface ya provee 2 funciones interesantes Get_Count( devuelve la cantidad de IE abiertos ) e Item(OleVariant):IDispatch( q se usa para obtener una instancia de la interface IWebbrowser2 dada). Para mas info http://delphi.about.com/od/interneti...rowserenum.htm, TShellWindows esta en el archivo "SHDocVw.pas" en "\Source\Internet" por si alguien le kiere pegar una ojeada.
El tema es como hacer lo mismo pero sin tener una interface que te provea de todas instancias ya creadas.
La posta es q estube mirando un par de paginas q dan ejemplos de como crear un Add-on para el MSN, para el cual se usa la interface IMessenger( y muchas otras mas q provee Microsoft). Hasta este punto todo bien ya que enrealidad el MSN tiene un mutex para evitar las multiples instancias, pero son bien conocidos los metodos para evitar el mutex(ademas del Msn Plus!). Entonces en el caso de tener multiples instancias del msn la funcion CoCreateInstance no me sirve ya solo me devuelve la interface del 1er msn iniciado y no del resto, pero kiero tener accesso a todas las instancias del IMessenger creadas, pero no se como hacerlo. Poder se puede, ya q Msn Plus! lo hace... como no se :(
Info sobre Add-on para el msn http://forum.mess.be/index.php?showt...CreateInstance

No se si pude explicar correctamente mi situación... espero q si :)

Puede q tenga varios errores con respecto al tema interfaces ya q es un tema muy nuevo para mi y recien estoy empezando a aprender sobre todo esto, en tal caso disculpa mi ignorancia

Saludos


La franja horaria es GMT +2. Ahora son las 02:14:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi