![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Volver a mostrar una ventana abierta con ShellExecute
Hola
Tengo una aplicación que muestra un digamos "listado de documentos" que el usuario puede abrir con un simple click. Para "abrir" un documento/fichero, se copia el fichero al directorio temporal del usuario y posteriormente se abre con ShellExecute.
Ahora bien, el usuario sigue trabajando y sigue abirendo, minimizando, ... vamos que llena la pantalla, y más pronto que tarde vuelve a intentar abrir un documento que ya está abierto y "tapado" por muchos otros ... Lo que yo quería es poder "traer al frente" el documento abierto, y no tener que "abrir" una nueva copia. Buscando he encontrado la función ShowWindowAsync.
Pero hace falta el handle de la ventana que se genera al llamar a ShellExecute. ¿Cómo podría obtener este handle?, y si no es posible ¿de qué otra forma podria hacerlo? Muchas gracias de antemano. Un Saludo
__________________
Sonríe. Mañana puede ser peor. |
#2
|
||||
|
||||
jplj,
Cita:
Revisa este código: El código anterior carga un archivo en disco a un TListBox, la idea también aplica para un TMemo o un TRichEdit y puedes mostrar la información en pantallas separadas si tu aplicación así lo requiere. Espero sea útil ![]() Nelson. |
#3
|
|||
|
|||
No es posible. Los documentos pueden ser desde una hoja d cálculo a una imagen, pdf, presentación, ...
En principio cualquier tipo de archivo que suela ser empleado para almacenar información.
__________________
Sonríe. Mañana puede ser peor. |
#4
|
||||
|
||||
Hola jplj.
A ver si te sirve de este modo... Del mismo modo podría implementarse mediante un TListBox que se hiciera visible ante el click de un botón y se ocultara luego de la selección. Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 02-04-2014 a las 01:24:01. Razón: agregar comentario |
#5
|
||||
|
||||
jplj,
Cita:
El código anterior en Delphi 7 bajo Windows 7 Professional x32, permite abrir los archivos contenidos en el TListBox con su aplicación por default en Windows por medio de ShellExecute y en caso de ser seleccionados nuevamente colocar la ventana de la aplicación en el tope del Z-Order (Si esta activa) o abrirla nuevamente si esta fue previamente cerrada, en resumen: Se abre una sola ventana por archivo seleccionado. Nota: Es fundamental que se coloque el nombre correcto de la aplicación (Como aparece en la ventana de la misma), en el formato: " - ApplicationName", si lo anterior no es correcto la aplicación se abrirá tantas veces como sea llamada. Revisa esta información: Espero sea útil ![]() Nelson. |
#6
|
|||
|
|||
Muchas gracias por vuestra ayuda ...
Voy a trabajar con las ideas que me habéis proporcionado, y comentaré la solución si la hayo o los problemas que me encuentre. De todas formas un par de apuntes rápidos:
Lo dicho, muchas gracias ![]()
__________________
Sonríe. Mañana puede ser peor. |
#7
|
|||
|
|||
Repecto a ...
Cita:
__________________
Sonríe. Mañana puede ser peor. |
#8
|
||||
|
||||
jplj
Cita:
![]() Cita:
Revisa este código: El código anterior (Versión 2 del código del Msg #5) en Delphi 7 bajo Windows 7 Professional x32, permite abrir de forma automática los archivos contenidos en el TListBox con su aplicación por default en Windows por medio de ShellExecute y en caso de ser seleccionados nuevamente, colocar la ventana de la aplicación en el tope del Z-Order si esta activa por medio de las APIs EnumWindows, FindWindow y SetForegroundWindow o abrirla nuevamente si esta fue previamente cerrada, en resumen: Se abre una sola ventana por archivo seleccionado. Nota: El nombre de la ventana (Segundo parámetro de la funcion FinWindow), debe estar en el formato "DocumentName - ApplicationName" el cual es obtenido de forma automática por medio de la función EnumWindows. Revisa esta información: Espero sea útil ![]() Nelson. Última edición por nlsgarcia fecha: 02-04-2014 a las 15:49:27. |
#9
|
||||
|
||||
Este es un problema extraño. ShellExecute en su segunda llamada debería activar automáticamente la ventana en la que ya está abierto el documento. Esto puede deverse a un problema en la configuración del registro o un problema con tu código.
Por ejemplo, si abres un documento desde el explorador, la segunda vez que lo intentas abrirlo (haciendo doble-click) te debería activar la ventana previamente creada con el documento. Intenta modificar tu código colocando el verbo explícitamente. Además pasaremos nil en los parámentros y ruta del archivo (nil != '') y por último el handle del escritorio, normalmente 0.
|
#10
|
|||
|
|||
Chris he comprobado lo que me dices, tanto en W7 con en XP abre una nueva ventana. Ocurre lo mismo desde el explorador.
Nelson, exactamente lo que andaba buscando ![]() Muchas gracias por vuestra ayuda. Juan P.
__________________
Sonríe. Mañana puede ser peor. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Volver a Mostrar los registros de un Dbgrid despues de haber echo una consulta | verde_esmeralda | PHP | 0 | 20-05-2011 19:03:38 |
TThread y cerrar una ventana previamente abierta | gluglu | OOP | 1 | 14-05-2007 19:19:54 |
Enviar texto a la ventana abierta | Mr.Vaka | Varios | 4 | 28-11-2005 18:57:31 |
Volver a mostrar un formulario creado dinámicamente. | jplj | Varios | 2 | 10-02-2005 13:19:27 |
abrir .htm en una nueva ventana con shellexecute | ruina | API de Windows | 5 | 24-06-2004 19:47:54 |
![]() |
|