Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Como ejecutar un programa externo. (https://www.clubdelphi.com/foros/showthread.php?t=56756)

jmgc1982 27-05-2008 07:54:55

Como ejecutar un programa externo.
 
Buenas a todos!

Me gustaría saber como se puede ejecutar un archivo .exe (ejecutable), especificando su directorio o path, ya que en la ayuda de builder c++ solo he encontrado shellexecute y winexec, per una de dos: o no me va bien, o no los utilizo correctamente...

;)


Muchas gracias a todos!:)

Neftali [Germán.Estévez] 27-05-2008 08:48:28

Muestranos cómo las estás ejecutando; Coloca algo de código y tal vez sea más fácil ayudarte. Esas funciones van perfectamente (salgo que tu caso sea algo muy raro).
Explica porqué no te funcionan o el error que te da.

Un saludo.

jmgc1982 27-05-2008 09:11:26

Ya esta...
 
Ufff...

Al final lo logre...

ShellExecute(Handle, "open", "C:\\WINDOWS\\system32\\cmd.exe", 0, 0, SW_SHOWNORMAL) ;

me fallaba las dobles barras c:\\ , ya que si ponia el path con barra simple no me salia bien.

De todas formas ahora tengo un problema mucho más complicado...

En builder he colocado un Edit, para que el usuario ponga un texto.

En el momento que presiona un botón, se ejecuta el cmd de windows, pero quiero pasarle un comando para que se ejecute en el momento de abrirlo.

Y sobre todo no se como enviar este comando, que en su interior tiene el texto que se ha escrito en el Edit.

Como podría hacer eso desde builder???

Muchisimas Gracias...:)

escafandra 27-05-2008 22:31:06

En caso de pasar comandos al cmd, como dices que quieres hacer, el problema lo tendrás en la sincronización. Es decir, cuando termina uno para pasar el siguiente?

Quizás sea mas fácil escribir un archivo.bat desde Builder y ejecutarlo después. de esa forma cada comando se ejecutará cuando le toque...

Saludos.

jmgc1982 29-05-2008 07:12:53

Ejecutar programa externo...
 
Y como creo un BAT dentro de builder y lo enlazo al botón???

Y ya de paso, que código le pongo al BAT para que me cumpla esa función...

Hace años que no hecho uno ;) :confused:

escafandra 29-05-2008 15:46:34

Cita:

Empezado por jmgc1982 (Mensaje 289802)
Y como creo un BAT dentro de builder y lo enlazo al botón???

Y ya de paso, que código le pongo al BAT para que me cumpla esa función...

Hace años que no hecho uno ;) :confused:

Un archivo.bat no es ni mas ni menos que un archivo de texto con los comandos que escribiriías en el cmd.exe y con la extensión .bat. Windows los considera ejecutables. ¿Que comandos tienes que escribir?. Pues los que pensabas pasar al cmd.
¿Como los creas?, pues repasa las funciones de C para escribir archivos de texto o la clase fstream.
Tambien puedes usar las funciones de fichero de las API de Windows.

¿Como lo ejecutas? Como un ejecutable mas.
Código:

ShellExecute(Handle, "open", "archivo.bat", 0, 0, SW_SHOWNORMAL) ;
Saludos.

Negriz 29-05-2008 18:07:37

y si usas sytem("comando"); ???
a mi me funcino para ejecutar comandos de la consola desde un boton en c++ builder.

jmgc1982 31-05-2008 11:33:56

Ejecutar comando CMD desde builder...
 
Buenas,

Al final pude crear el BAT. Lo cree con la forma de que cuando se ejecuta, si le paso el parametro %1 con el texto del edit, va OK.

Ejemplo:

Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>dato.bat "parametro %1" (sin comillas, aqui iria el texto del edit)

Pero el gran problema que tengo, es que como paso el texto del edit a la posición del parámetro, ya que de esta forma haciendo un system("c:\\dato.bat "texto edit" ") ya lo tendría solucionado...

Gracias a todos.:)

escafandra 31-05-2008 16:08:41

Bueno, puedes ejecutar comandos directamente con system. La pega el que no tienes control sobre la ventana del cmd que se abre. Se abre, ejecuta y cierra directamente. Si la quieres dejar abierta, no se si es tu caso aunque me parece que es tu deseo, entonces la tecnica del bat es mas adecuada.

Puedes crear un bat en el que escribes los comandos desde el edit y luego lo ejecutas. Si sólo te interesa un comando cada vez, pues el bat lo creas con un solo comando. Si no te interesa mantener abierta la ventana del cmd, una vez ejecutado tu comando, pues simplemente utiliza system.

ejemplo:
archivo.bat
Código:

c:
cd micarpeta
dir
pause

con el comando pause, consigues congelar el bat hasta que pulses una tecla...

No te hace falta el parámetro genérico %1, simplemente lo escribes en un archivo con el nombre que quieras.bat. Luego lo ejecutas con system o con ShellExecute.

Espero aclararte tus dudas. Saludos.

jmgc1982 02-06-2008 07:44:15

Ejecutar CMD...
 
Buenas,

Gracias por el consejo escafandra, ejecutar un comando desde un bat y desde builder C++ con system(), se como hacerlo.

Pero sobre lo que escribistes:

" Puedes crear un bat en el que escribes los comandos desde el edit y luego lo ejecutas."

Esto es lo que me gustaria saber, Como pasar el texto del edit hacia el CMD...

Por ejemplo:

Poniedo en el edit d: ; Con system("DIR X") y en el sitio de "X" poner el contenido del edit (D:). Así cuando ejecuto, se ejecuta el CMD y hace un dir a la unidad escrita en el edit (C:, D:, etc...)

Gracias!!!

escafandra 02-06-2008 09:47:29

Escribes el archivo.bat, por ejemplo así:

Código:

   
#include <ios.h>
#include <fstream.h>
.
.
.
  fstream fs("archivo.bat", ios::out | ios::trunc);
    if(fs.fail()){
      AnsiString Msg = "Imposible escribir el fichero ";
      Application->MessageBox("Imposible escribir el fichero ", MB_ICONEXCLAMATION);
    }
    else{
      fs << Edit1->Text << endl;
      fs << "pause" << endl;
      fs.close():
    }

No es la única forma de escribir un archivo, hazlo como lo quieras...

Saludos.

EDITO:
Cita:

Empezado por jmgc1982 (Mensaje 290642)
Por ejemplo:

Poniedo en el edit d: ; Con system("DIR X") y en el sitio de "X" poner el contenido del edit (D. Así cuando ejecuto, se ejecuta el CMD y hace un dir a la unidad escrita en el edit (C:, D:, etc...)

Gracias!!!

pues en este caso sería:

Código:

    .
    .
    .
    else{
      AnsiString Cadena = (AnsiString)"dir " + Edit1->Text;
      fs << Cadena  << endl;
      fs << "pause" << endl;
      fs.close():
    }



La franja horaria es GMT +2. Ahora son las 20:19:51.

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