• Domingo 22 de Diciembre de 2024, 09:46

Autor Tema:  Llamar A Otro Programa Sin Que Se Vea En Pantalla?  (Leído 2171 veces)

vane_arg

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Llamar A Otro Programa Sin Que Se Vea En Pantalla?
« en: Sábado 25 de Noviembre de 2006, 03:49 »
0
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..

dBase3

  • Miembro activo
  • **
  • Mensajes: 85
    • Ver Perfil
Re: Llamar A Otro Programa Sin Que Se Vea En Pantalla?
« Respuesta #1 en: Sábado 25 de Noviembre de 2006, 05:01 »
0
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

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]

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamar A Otro Programa Sin Que Se Vea En Pantalla?
« Respuesta #2 en: Sábado 25 de Noviembre de 2006, 10:00 »
0
Para esto tenes que usar la API de Windows:

ShellExecute
http://msdn.microsoft.com/library/default....hellexecute.asp

CreateProcess
http://msdn.microsoft.com/library/default....eateprocess.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.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

vane_arg

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Llamar A Otro Programa Sin Que Se Vea En Pantalla?
« Respuesta #3 en: Miércoles 29 de Noviembre de 2006, 05:38 »
0
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..

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Llamar A Otro Programa Sin Que Se Vea En Pantalla?
« Respuesta #4 en: Miércoles 29 de Noviembre de 2006, 08:17 »
0
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

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

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.