SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: vane_arg en Sábado 25 de Noviembre de 2006, 03:49

Título: Llamar A Otro Programa Sin Que Se Vea En Pantalla?
Publicado por: vane_arg en Sábado 25 de Noviembre de 2006, 03:49
Ahora ejecuto otros programas con la funcion spawnl, pero aparece la ventana de ms-dos con el programa hasta que termina y se cierra, pero yo quisiera que ese programa que llamo no se vea. El programa que estoy haciendo constantemente tiene que llamar a otro y cuando éste termina lo vuelve a llamar con un parámetro distinto, por lo que aparecen y desaparecen ventanas de ms-dos contínuamente y queda bastante feo, por eso quisiera que se ejecuten pero sin verse, como los programas residentes en memoria, por ejemplo.
Uso el borland c++ 6, desde ya gracias..
Título: Re: Llamar A Otro Programa Sin Que Se Vea En Pantalla?
Publicado por: dBase3 en Sábado 25 de Noviembre de 2006, 05:01
seguro que en C hay maneras más faciles de hacerlo pero por darte la manera como lo hago yo es con el siguiente código en una linea:[/size]

Código: Text
  1. if $CmdLine[0]=1 then Run($CmdLine[1] , "", @SW_HIDE)
  2.  
Citar
$CmdLine[0] es el número de parámetros y  $CmdLine[1]  el primer parámetro del arrancador, y @SW_HIDE te esconde los pantallazos

Al compilar generas un exe q "miArrancador.exe", y ahora se te esconden esos pantallazos.

Tienes que cambiar la linea donde llamas a tus programas por la siguiente linea:

Citar
miArrancador.exe "NOTEPAD.EXE miFichero.txt"

El compilador aquí en Downloads (cuesta 0$,  claro, aunq no cueste nada no hay q desmerecer su potencia si no lo conoces mira el link):

Link a Autoit en Español (http://www.autoit.es)

Si los programas tienen parámetros pones comillas para identificar que va todo junto

:alien: Edit: por si no lo puedes hacer en c:
espere a que termine el programa que llamo antes de seguir con la próxima instrucción: cambias RUN POR RUNWAIT y el resto es igual
[/size]
Título: Re: Llamar A Otro Programa Sin Que Se Vea En Pantalla?
Publicado por: Eternal Idol en Sábado 25 de Noviembre de 2006, 10:00
Para esto tenes que usar la API de Windows:

ShellExecute
http://msdn.microsoft.com/library/default....hellexecute.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp)

CreateProcess
http://msdn.microsoft.com/library/default....eateprocess.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp)

dBase3: Te recuerdo que este es el foro de C/C++ y no el de cualquier herramienta que se nos ocurra y no conozca nadie. Esa funcion Run no la podemos usar en C/C++ y la constante es en todos los lenguajes NORMALES SW_HIDE.
Título: Re: Llamar A Otro Programa Sin Que Se Vea En Pantalla?
Publicado por: vane_arg en Miércoles 29 de Noviembre de 2006, 05:38
Muchas gracias.. lo hice con ShellExecute y la aplicación se ejecuta sin verse, pero ahora tengo un nuevo problema.. hacer que el primer programa espere a que termine el programa que llamo con shellexecute antes de seguir con la próxima instrucción.
Por eso yo había usado en primer lugar la función spanl, que me permite esperar a que la otra aplicación termine, pero no evitar que se vea. Y con shellexecute logro ésto último pero no lo de esperar..
Bueno, si alguien tiene alguna solución se lo agradecería, y perdón si la estoy haciendo muy pesada la cosa..
Título: Re: Llamar A Otro Programa Sin Que Se Vea En Pantalla?
Publicado por: Eternal Idol en Miércoles 29 de Noviembre de 2006, 08:17
De nada; CreateProcess te devuelve un handle al proceso sobre el cual podes hacer un WaitForSingleObject y tambien podes probar con ShellExecuteEx que tiene un campo del mismo tipo en la estructua que usa.

http://msdn.microsoft.com/library/default....llexecuteex.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecuteex.asp)

No hay NADA que puedas hacer en lenguajes desconocidos de cuarta categoria que no puedas hacer en C.[/size]