PDA

Ver la Versión Completa : Utilizar shellexecute y esperar finalizacion


Enan0
27-08-2004, 22:31:54
Hola estoy usando el shellexecute para abrir un archivo .udl, el cual se utiliza para generar string de conexion a bases de datos, pero necestio esperar a que el usiuario lo cierre para proseguir con la ejecucion del programa.. ¿Como lo hago? :confused:

roman
27-08-2004, 23:10:19
Lo usual para este tipo de tareas es utilizar la función WaitForSingleObject. Sin embargo, esta función espera un identificador del proceso al que se va a esperar y la función ShellExecute no te lo proporciona.

Una alternativa es usar CreateProcess para ejecutar directamente la aplicación que maneja tus archivos udl en lugar de hacerlo a través del shell (como lo hace ShellExecute). En el hilo ejecutar archivo y esperar que termine (http://www.clubdelphi.com/foros/showthread.php?t=13422&highlight=WaitForSingleObject) puedes ver un ejemplo de uso aunque tendrás que adaptarlo un poco llenando los campos pertinentes en la estructura TStartupInfo.

Otra opción es usar ShellExecuteEx. Aquí te pongo un ejemplo de uso:


var
ExecInfo: TShellExecuteInfo;

begin
ExecInfo.cbSize := SizeOf(ExecInfo);
ExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
ExecInfo.Wnd := Handle;
ExecInfo.lpVerb := 'open';
ExecInfo.lpFile := 'prueba.udl';
ExecInfo.lpParameters := nil;
ExecInfo.lpDirectory := nil;
ExecInfo.nShow := SW_SHOW;

ShellExecuteEx(@ExecInfo);
WaitForSingleObject(ExecInfo.hProcess, INFINITE);

{
El código en esta parte no se ejecutará
hasta que termine la otra aplicacíon
}


Ten en cuenta lo siguiente. Al menos con ShellExecuteInfoEx (no lo he probado con CreateProcess) WaitForSingleObject regresará de inmediato en algunas circunstancias. Por ejemplo, si la aplicación que maneja los documentos ya está abierta y usa el mismo proceso para abrir el nuevo documento. Esto sucede con una aplicación MDI o aplicaciones como Internet Explorer que aun cuando no son MDI sí usan el mismo proceso para abrir nuevos documentos.

// Saludos

sowei
22-04-2013, 13:53:52
Gracias !
Me ha ido de perlas !

brahianblade11
25-06-2023, 22:16:08
Gracias , Funciona al 100:D