Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Cerrar Archivo Abierto con ShellExecute (https://www.clubdelphi.com/foros/showthread.php?t=87090)

Draker 12-11-2014 17:33:31

Cerrar Archivo Abierto con ShellExecute
 
Buenos dias, pues bien, yo ejecuto mi archivo con:

Código Delphi [-]
ShellExecute(handle,'open',Pchar(fOld),nil,nil,SW_SHOWNORMAL);

La cuestión es que me gustaria saber si hay forma de que al "ejecutarlo" se pueda obtener el handle de esa archivo abierto, para luego cerrarlo con:

Código Delphi [-]
SendMessage(hdl, WM_CLOSE, 0, 0);

Esto devido a que con

Código Delphi [-]
A:= TmNombre.Value+'.'+txTipo.Text+' - Adobe Reader';
hdl := FindWindow(nil, PChar(A) );
SendMessage(hdl, WM_CLOSE, 0, 0);

Logro cerrar los archivos pdf exclusivamente, aparte de que si el archivo PDF muestra la leyenda "(protegido)", ya no logra encontrar dicha ventana.

dec 12-11-2014 18:01:47

Hola,

Creo que con "ShellExecute" no podrás lograr lo que quieres. Busca información sobre "CreateProcess" y "TerminateProcess". ;)

Draker 12-11-2014 21:39:24

graciassss dec, me funciono muy bien, aunque tendre que hacer un arreglo para saber el programa y la ruta del mismo para abrir determinado archivo (pdf,doc,lit,etc) pero realmente es lo que queria.

escafandra 14-11-2014 00:35:57

Para saber que ejecutable abre un archivo, revisa la API FindExecutable

Saludos.

Draker 14-11-2014 02:47:58

#:-)#, grax escafandra, complementaste mi laburo, aprovecho para preguntar:

Puedo cerrar mis archivos abiertos con mi aplicación, peeeero, los archivos en word se cierran y puedo moverlos a otra ubicación, pero me dejan su archivo temporal (~$archivo.doc) en la carpeta origen.

Alguna sugerencia de como hacerlo con el TerminateProcess?

escafandra 14-11-2014 07:13:06

Cita:

Empezado por Draker (Mensaje 484728)
...los archivos en word se cierran y puedo moverlos a otra ubicación, pero me dejan su archivo temporal (~$archivo.doc) en la carpeta origen.

Alguna sugerencia de como hacerlo con el TerminateProcess?

Sólo te queda borrarlos. Ten en cuenta que TerminateProcess es un método de «cerrar a lo bruto». La App no guardará copias de los archivos con los que trabajaba y perderá información.


Saludos.


La franja horaria es GMT +2. Ahora son las 20:35:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi