Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-08-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
2 llamadas a ShellExecute

Hola, que tal, pues aquí iniciandome en delphi otra vez.

El problema que ahora me surge es el siguiente:
Necesito ejecutar un programa y lo hago meidante shellexecute, al terminar este debe ejecutar un segundo programa generado por la primera llamada a shellexecute, el problema está en que si coloco los 2 shellexecute juntos no me ejecuta el segundo pues este no ha sido ejecutado aún.

Lo que necesito saber es como puedo hacer para ejecutar el segundo shellexecute hasta que haya finalizado el primero.
Agradezco sus comentarios.

Saludos.
Responder Con Cita
  #2  
Antiguo 23-08-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Echa un vistazo en el apartado de Trucos Darwin. Concretamente busca trucos con la palabra clave "ejecutar" y verás.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 23-08-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por dec
Echa un vistazo en el apartado de Trucos Darwin. Concretamente busca trucos con la palabra clave "ejecutar" y verás.
Muchísimas gracias David, no se como se me pasaron por alto los trucos.

Saludos.
Responder Con Cita
  #4  
Antiguo 23-08-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Hola de nuevo David, dejame decirque que tengo un pequeño problema con esta función, y es que necesito enviarle parámetros al programa a ejecutar.
Código Delphi [-]
ShellExecute(Form1.Handle, nil,pChar(Comp.Path+Comp.ExeName),pChar(ActiveFile), nil, SW_SHOWNORMAL);
donde ActiveFile es el parámetro que necesito pasar a el archivo a ejecutar.

Me hechas una mano?

saludos.
Responder Con Cita
  #5  
Antiguo 23-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por D-MO
Hola de nuevo David, dejame decirque que tengo un pequeño problema con esta función, y es que necesito enviarle parámetros al programa a ejecutar.

ShellExecute(Form1.Handle, nil,pChar(Comp.Path+Comp.ExeName),pChar(ActiveFile), nil, SW_SHOWNORMAL);

donde ActiveFile es el parámetro que necesito pasar a el archivo a ejecutar.

Me hechas una mano?

saludos.
¿y cual es el problema?
Responder Con Cita
  #6  
Antiguo 23-08-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por seoane
¿y cual es el problema?
jejejeej, lo siento, lo que pasa es que con shellexecute lo hago como lo expresé arriba y todo bién pero me ejecuta el shellexecute uno tras otro y necesito esperar a ejecuar el segundo cuando termine el primero.

Intento hacerlo como lo explican en el truco:
http://www.clubdelphi.com/trucos/ind...ll=0&scrollb=0
Pero no se como pasarles los parámetros extras al ejecutable.

Gracias por contestar Seoane.

Slaudos.
Responder Con Cita
  #7  
Antiguo 23-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
En principio solo tienes que pasar el programa que quieres ejecutar y los parámetros separados por espacios, es decir, si quieres ejecutar el notepad y pasarle como parámetro hola.txt, deberías de hacer algo como esto:

Código Delphi [-]
  WinExecAndWait32('notepad.exe hola.txt',sw_show);
Responder Con Cita
  #8  
Antiguo 23-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
También puedes modificar la función un poquito:

Código Delphi [-]
function Ejecutar(Filename, Param: string; ShowWindow: WORD): DWORD;
var
  StartupInfo:TStartupInfo;
  ProcessInfo:TProcessInformation;
begin
  GetStartupInfo(StartupInfo);
  StartupInfo.wShowWindow:= ShowWindow;
  if CreateProcess(nil,PChar(Filename + ' ' + Param),nil,nil, FALSE,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,
    ProcessInfo) then
  begin
    WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess,Result);
  end else
    Result:= DWORD(-1);
end;


// Ejemplo de uso
Ejecutar('notepad.exe','hola.txt',sw_show);
Responder Con Cita
  #9  
Antiguo 23-08-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por seoane
En principio solo tienes que pasar el programa que quieres ejecutar y los parámetros separados por espacios,
Pues ya había intentado esto pero supongo que en algo me equivoque pues no me funcionó, en todo caso si funciona. Gracias.

Me quedo con la función ejecutar que me diste, es mucho mas corta y me confunde menos. He cambiado el valor de retorno a booleano para colocarlo dentro de un if y si devuelve true ejecuto el siguiente código.

He comentado la línea:
Código Delphi [-]
GetExitCodeProcess(ProcessInfo.hProcess,Result);
puesto que involucrava la variable result y debería ser como DWORD y no BOOLEAN, hay algun problema si la dijo asi?


Además, me gustaría tomar el resultado de la ejecución del programa, es decir, lo que mostraría este programa en consola.

En lo que trabajo es un editor, el cual, junto con FreePascal puedo crear/editar/compilar aplicaciones escritas en pascal pero necesito saber cual es el resultado de la compilación, si hubieron errores y ya saben, los mensajes que te manda el compilador si compilas en consola.

Agradezco cualquier comentario.

Saludos y Gracias.
Responder Con Cita
  #10  
Antiguo 23-08-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Este es el programa del que hablo, ya incluye el compilador y un archivo de ejemplo que podrán abrir usando el menu "Archivo->Abrir" (Obvio jeje).

No puedo poner el código en estos momentos puesto que está un "poco" desordenado y mal organizado pero luego si estará a disponibilidad de todos, agradecería que me comentaran que les parece.

Saludos.
Responder Con Cita
  #11  
Antiguo 23-08-2006
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
Pues no tengo ni idea de qué es, para qué sirve ni por qué tantos archivos y ejecutables. A primera vista parece un pascal script como el de RemObjects pero no sé si este lo hiciste tú o como es la cosa. Vamos, que un poco de explicación no caería mal. O quieres simplemente que digamos Ohhhh, ¡maestro!

// Saludos
Responder Con Cita
  #12  
Antiguo 23-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Debo de ser un poco torpe porque no conseguí compilar ni siquiera el programa de ejemplo Pero de todas formas si quieres capturar la salida de un programa en un string, puedes usar el truco 54. Con la función que aparece en este truco puedes ejecutar un programa o comando y capturar la salida en un string. Creo que es justo lo que estas buscando.
Responder Con Cita
  #13  
Antiguo 23-08-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Cita:
Empezado por roman
Pues no tengo ni idea de qué es, para qué sirve ni por qué tantos archivos y ejecutables. A primera vista parece un pascal script como el de RemObjects pero no sé si este lo hiciste tú o como es la cosa. Vamos, que un poco de explicación no caería mal. O quieres simplemente que digamos Ohhhh, ¡maestro!
Jajajajajajaja mira que si me has hecho reir con esto último jajajaja
Pues mira, si te refieres al dEdit.zip, el único ejecutable que he hecho el el dEdit, ahora lo que se encuentra en los demás directorios a excepcion del directorio /proyects/ es del compilador FreePascal, ¿pero que es dEdit? pues nada mas que un simple editor que con la ayuda de synedit resalta la sintaxis de pascal, tiene la opción de guardar y compilar, lo cual es ta nsimple como escribir en la línea de comandos:
Código:
C:/ruta/de/freepascal/bin/ppc386 c:/ruta/del/archivo.pas
y si la compilación se ejecuta correctamente tendrás un ejecutable de nombre
Código:
c:/ruta/del/archivo.exe
Que es lo que necesito saber, ya el editor me ejecuta y compila pero únicamente si el archivo está escrito correctamente, sin errores, si si hay algun error siempre me tratará de ejecutar el archivo que se supone debió haber creado y me mandará algun error.

Cita:
Empezado por seoane
Debo de ser un poco torpe porque no conseguí compilar ni siquiera el programa de ejemplo
No se a que se deba, pero supongo que el programa no configuró correctamente el directorio en el que lo dejaste, revisa si en el archivo config.ini en la variable "CompilarPah" tienes la ruta de correcta, esta ruta es donde estan situados los archivos, si no es asi, cambia el valor de la variable First a 1 y ejecuta el preograma de nuevo.

Además pudo deberse a que no configurara la tura del fichero de configuración del compilador, para ello revisa el archivo bin/fpc.cfg y busca donde diga
Cita:
# -----------------------
# Set Filenames and Paths
# -----------------------

# Both slashes and backslashes are allowed in paths

# path to the messagefile, not necessary anymore but can be used to override
# the default language
#-FrC:/Proyectos/Delphi/dEdit/Aplicacion/msg/errore.msg
y compara la última linea con la de tu archivo, debe tener la ruta del ejecutable en tu máquina.


Estoy revisando el truco que me das seoane y aparentemente si es lo que necesito, no lo pruevo ahorita porque voy de salida pero al rato te digo.

Saludos.

Edicion:
Ahhhhhh ya lo olvidava seoane, si cambias el valor de First a 1 e inicias el programa te mandará una ventanita diciendote que el compilador se configuró correctamente, luego revisa si asi fue.

Saludos.

Última edición por D-MO fecha: 23-08-2006 a las 16:05:03.
Responder Con Cita
  #14  
Antiguo 23-08-2006
Avatar de D-MO
D-MO D-MO is offline
Miembro
 
Registrado: ago 2005
Ubicación: root@debian:/#
Posts: 1.042
Poder: 20
D-MO Va por buen camino
Avances:
  • Gracias Seoane, funcionó perfectamente, ya el resultado es capturado y analizado en busca de errores, si los encuentra, detiene la ejecución del nuevo ejecutable.
  • Un nuevo memo en la parte inferior del editor que muestra los mensajes de error que manda el compilador.
  • Desde que se ejecuta el programa se puede escribir el código a compilar, luego con dar clic en el boton de compilar (único en la barra de herramientas) guarda y compila.
Aquíestá el dEdit.exe nuevo por si lo desean descargar, solo bastará con reemplazar el dedit.exe anterior con el de ahora y funcionará perfectamente.

Saludos y espero comentarios.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Identificador de llamadas... Sinaloense Varios 4 07-07-2007 21:31:51
Identificador de llamadas en .NET edalmasso Varios 1 18-05-2006 17:02:35
Llamadas al sistema Juan Fuentes API de Windows 1 16-03-2005 16:22:49
ID llamadas telefononicas vichovi API de Windows 3 19-07-2004 13:14:18
identificación de llamadas the darkness Varios 1 02-03-2004 14:05:58


La franja horaria es GMT +2. Ahora son las 08:51:16.


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