Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-08-2004
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
Question Utilizar shellexecute y esperar finalizacion

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?
Responder Con Cita
  #2  
Antiguo 27-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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 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:

Código Delphi [-]
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
Responder Con Cita
  #3  
Antiguo 22-04-2013
sowei sowei is offline
Miembro
 
Registrado: abr 2010
Posts: 21
Poder: 0
sowei Va por buen camino
Gracias !
Me ha ido de perlas !
Responder Con Cita
  #4  
Antiguo 25-06-2023
brahianblade11 brahianblade11 is offline
Registrado
 
Registrado: ago 2013
Posts: 2
Poder: 0
brahianblade11 Va por buen camino
Gracias , Funciona al 100
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:59:26.


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
Copyright 1996-2007 Club Delphi