![]() |
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 |
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. |
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. |
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 :) |
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. |
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 :) |
Repecto a ...
Cita:
|
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. |
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.
|
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. |
La franja horaria es GMT +2. Ahora son las 00:17:06. |
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