FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
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 |
|