PDA

Ver la Versión Completa : Como ejecutar un programa externo.


jmgc1982
27-05-2008, 07:54:55
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
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
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
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 (http://www.ignside.net/man/dos/batch.php) 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 (http://mimosa.pntic.mec.es/%7Eflarrosa/fichc.pdf) de texto o la clase fstream (http://personal2.iddeo.es/adamicro/unix/dicp80.htm).
Tambien puedes usar las funciones de fichero de las API (http://msdn.microsoft.com/en-us/library/aa364232(VS.85).aspx) de Windows.

¿Como lo ejecutas? Como un ejecutable mas.

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
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:
cd micarpeta
dir
pausecon 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
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í:


#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:

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:


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