Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   ShellExecute para ejecutar comando que contiene '>' (https://www.clubdelphi.com/foros/showthread.php?t=41249)

mlara 10-03-2007 20:02:13

ShellExecute para ejecutar comando que contiene '>'
 
Veamos esto...

Código:

ShellExecute(Handle, nil, PChar('G:\Mostrar_Num.bat > G:\Num.txt'), nil, nil, SW_SHOWNORMAL);
El archivo Mostrar_Num.bat es un archivo por lotes que muestra un número (a manera de ejemplo). Así la línea que contiene el archivo Mostrar_Num.bat es:

Código:

@echo 8
Al ejecutar en la línea de comandos del sistema la línea:

Código:

G:\>Mostrar_Num.bat > Num.txt
Se crea el archivo 'Num.txt' y en el se consigna el número 8. Pero cuando ejecuto la instrucción ShellExecute, no pasa nada, y la función no genera ningún error.

La pregunta entonces sería la siguiente: ¿De qué otra manera se puede ejecutar esa línea desde Delphi de tal manera que funcione?

seoane 10-03-2007 21:47:32

La respuesta corta:
Usa el truco 54. Este permite ejecutar la linea de comandos tal cual tu la tienes, o incluso, permite capturar directamente la salida del programa sin tener que utilizar un archivo de texto.

La respuesta larga:
Tu codigo no funciona porque en la funcion Shellexecute, el programa a ejecutar y los parametros tienen que pasarse por separado. Es decir:
Código Delphi [-]
ShellExecute(Handle,nil,PChar('G:\Mostrar_Num.bat'),PChar('> G:\Num.txt'),nil,SW_SHOW);
Pero aun asi no funcionaria como tu esperas, ya que la redireccion ">" es un parametro manejado por el interprete de comandos. Asi que lo que debemos ejecutar es el interprete de comandos, y pasarle toda la linea como parametro. Algo Asi:
Código Delphi [-]
ShellExecute(Handle,nil,PChar('cmd.exe'),PChar('/c G:\Mostrar_Num.bat > G:\Num.txt'),nil,SW_SHOW);
Y aun asi, tendríamos que resolver el problema de que el interprete de comandos no se llama siempre igual en todos los windows, tendríamos que obtener su nombre de la variable de entorno COMSPEC.

En fin, mejor usar el truco 54 :D

mlara 11-03-2007 00:23:52

Vaya, qué me estará pasando? La solución es lógica! je je :D.

No esperaría una respuesta mejor, ni más rápida. Gracias seoane.

Voy a probar las dos soluciones, para dos aplicaciones diferentes. En realidad en una de ellas requiero del archivo de texto, pero en la otra quizás no, así que el truco 54 en este caso será una alternativa excelente.

lacovera 25-03-2007 23:06:25

a mi no me va el shellexecute
 
hola!! estoy intentando llamar a un programa externo desde delphi 2006 con ShellExecute y no me lo reconoce (undeclarated identifier ShellExecute)
hay que agregar algo a mi proyecto para poder utilizarlo?? :confused:

Muchas gracias!!

seoane 25-03-2007 23:08:52

Cita:

Empezado por lacovera
hay que agregar algo a mi proyecto para poder utilizarlo?? :confused:

Código Delphi [-]
uses ShellApi;

lacovera 26-03-2007 01:25:28

Muchas gracias :o


La franja horaria es GMT +2. Ahora son las 18:48: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