![]() |
Como traigo al frente una aplicacion que no sea la mia
Saludos:
mi problema es que ocupo hacer una aplicacion que me muestre las aplicaciones abiertas, es decir tengo abierto excell y word y quiero que mi aplicacion ponga al frente 3 sec una aplicacion y 3 Sec la otra con una funcion puedo obtener la lista de los exes que se estan ejecutando incluso obtengo los Thred de cada exe utilizo el siguiente codigo y no me funciona Por fa. alguien Ayudeme Código:
la funcion ActIdApp; obtiene cada uno de los THred que tengo en un Arreglo. Gracias a Yodos |
Este código, que por cierto tomaste de http://www.clubdelphi.com/users/roman/uiapp.php,
está pensado para traer al frente la aplicación desde donde se llama este código de manera que desconozco si sirve para el caso que intentas aplicar. Lo que observo es que, a pesar de que cambiaste AppThreadId para que apunte al hilo de la aplicación que deseas activar, no parece que hayas cambiado el Handle en la llamada a SetForegroundWindow, así que posiblemente también debas cambiarlo para que apunte a la ventana de la aplicación que intentas activar. // Saludos |
Gracias Roman:
y de hecho si tome el codigo de ahi: y respecto a tu respuesta te refieres SetForegroundWindow(AppThreadId); Si es asi ya lo probe. y no me funciono no se si puedas ayudarme con otra pista. Gracias. |
Cita:
¿Cómo estás obteniendo la lista de hilos? Quizá algo similar te permita obener la lista de ventanas. // Saludos |
Muchisimas gracias Roman
Eso de cambiar el hanle me resulto muy bien estoy afinando la aplicacion por que traigo varios errores pero creo que con esto me funciona bien gracias de nuevo |
Hola Amigos del Foro:
Recurri a este hilo ( no se si es correcto ) porque tengo un pequeño problema Respecto a la solucion de mi problema: Siguiendo la recomendacion de roman cambie el valor que utilizo para traer la ventana al frente oteniendo por separado el hanle de esta y funciona correctamente el problema es que para algunos programas no funciona Ejemp. el Internet Explorer o el explorador de Windows, o Excel, word... Haber si me pueden echar la mano el codigo que utilizo para obtener el hilo y el hanle es el sig. Código:
Espero que alguien me pueda dar una pista, de antemano Garcias a Todos. |
Comentario al margen:
En Windows 2000 siempre que tengo una ventana de IE abierta, las siguientes que desee abrir jamás se activan correctamente. A veces aparecen pero no tienen el foco y aveces sólo queda parpadeando el botón en la barra de tareas; situaciones por demás exasperantes. Si el mismo IE no es capaz de activarse a sí mismo correctamente, me pregunto si valdrá la pena intentar hacerlo uno mismo? // Saludos |
Si de hecho eso estaba pensando, Solo que como me ocurre lo mismo con aplicaciones como excel y word supuse que algo estaria haciendo mal
Como sea Gracias |
Vamos a ver una cosa.
¿Es realmente necesario el uso de AttachThreadInput? El código que utilizas lo usé yo en otro contexto: el de evitar que una aplicación se ejecute más de una vez simultáneamente. En ese caso fue necesario por la siguiente razón (al menos es lo que creo entender): El código de activación (el que usa AttachThreadInput) se ejecuta en la primera instancia de la aplicación en un momento en que ésta no tiene el foco (el foco lo tiene la segunda instancia). Dicho de otra forma, es un código que se ejecuta desde un hilo distinto al que tiene el foco. En tu caso, según entiendo, es distinto-- el código de activación se ejecuta desde tu aplicación que es la que tiene el foco. En ese caso siento que no deberías tener problemas con métodos más sencillos de activación. El siguiente código lo acabo de probar y activa correctamente tanto IE como en MSWord: Código:
var Pruébalo así a ver si te sirve. // Saludos pd: Esto sólo lo he probado en Windows 2000 |
Saludos de Nuevo
no se si algo estoy haciendo mal uso este codigo y no me funciona [code] var AppHandle: HWnd; begin AppHandle := FindWindow(nil, 'IEXPLORE.EXE' ); if AppHandle <> 0 then if IsIconic(AppHandle) then ShowWindow(AppHandle, SW_RESTORE) else SetForegroundWindow(AppHandle); ]/Code] Estoy utilizando: delphi3 y windows 2000 delphi3 y windows 98 y en ninguno me funciona solo me falta probar con win 2000 y delphi 6 ayuda por favor |
Cita:
El parámetro que le pasas a FindWindow es el título de la ventana y no el del ejecutable, por ejemplo: 'Foros Club Delphi - Responder al tema - Microsoft Internet Explorer'. Yo te puse FindWindow sólo por dar un ejemplo rápido para encontrar el "Handle" de una ventana (del IE en este caso). Cuando uses EnumWindows, el Handle que te pasa en la función callback es el que usarás en las llamdas a IsIconic, ShowWindow y SetForegroundWindow. // Saludos |
Tal vez tengo algun problema al obtener el Handle de la aplicacion porque no me finciona
ojala se no ocurruera otra cosa Gracias |
La franja horaria es GMT +2. Ahora son las 04:42:32. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi