[Lazarus-es] TProcess Handle

Antonio Evora aevorar en gmail.com
Vie Ago 2 22:10:12 CEST 2013


Buenas,
Lo que necesito es empotrar una aplicación externa dentro de un panel de mi aplicación. Lo que se pretende es que desde mi aplicación pueda lanzar distintas aplicaciones externas que se mostrarán dentro de la mía (a modo de panel de gestión). He conseguido realizarlo con éxito con el bloc de notas de Windows (la aplicación solo debe correr en Windows, no es necesario que lo haga en otros sistemas) y con la calculadora.  Esto lo consigo lanzando el proceso, espero un tiempo prudencial para dar tiempo a que muestre la ventana, la busco con findwindow y trabajo con ese handle (si queréis os paso el código de prueba). Lo que sí he notado que con aplicaciones más "complejas" (ventanas sin barra de título) el empotramiento falla, la semana que viene investigare un poco más y os contare avances. Cualquier información/aclaración/orientación será bienvenida.

Un saludete y bien fin de semana.

Enviado desde mi iPhone

El 02/08/2013, a las 01:27, Martin Gomez <mmgomez en gmail.com> escribió:

> Perdón Antonio, pero para que necesitas saber el Handle?
> Le piensas enviar mensajes de Windows con SendMessage o algo por el estilo?
> Si es sólo para esperar a que el proceso termine, puedes usar la propiedad Options, agregando poWaitOnExit, o mirando la propiedad Running.
> 
> De acuerdo a la documentación, las propiedades Handle y ProcessHandle te devuelven el Handle al programa, el Hwnd es el Handle a la ventana, no al programa, y no estoy seguro que eso funcione fuera de Windows.
> 
> Saludos,
> Martín
> 
> 
> 2013/8/1 José Mejuto <joshyfun en gmail.com>
>> El 01/08/2013 8:16, Antonio Évora escribió:
>> 
>>>> 
>>>> No puedes :( Un proceso puede lanzar múltiples "windows", por lo tanto
>>>> lo único que puedes hacer es, usando el ThreadHandle, enumerar todas
>>>> las ventanas de ese proceso, y de algún modo elegir la que quieres.
>>> Gracias José.
>>> Entiendo lo que me dices. Pero siempre debe haber un
>>> formulario/ventana/window principal, ¿como puedo saber cual es el
>>> principal?
>> 
>> Hola,
>> 
>> No, no hay, ese es un concepto de Delphi. En mi opinión lo máximo que puedes acercarte de modo genérico es lanzar el proceso, y entrar en un bucle esperando a que el proceso tenga alguna ventana abierta (EnumWindows) y usar la primera que aparezca. Lo malo es que si el programa tiene una ventana de presentación (splash), esa es la que te comerás :(
>> 
>> Por supuesto esto no es cross-platform, en Windows funciona pero lo dudo en otros SO.
>> 
>> EnumWindows devuelve los handles de las ventanas por Z-Order, o sea, primero la que se muestra por encima de las otras (dentro de ese proceso).
>> 
>> -- 
>> 
>> 
>> _______________________________________________
>> Lazarus-es mailing list
>> Lazarus-es en lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
> 
> 
> 
> -- 
> Try not to become a man of success but rather to become a man of value. Albert Einstein
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20130802/b5cd9659/attachment-0002.html>


More information about the Lazarus-es mailing list