SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: maikmr en Miércoles 24 de Agosto de 2005, 17:26

Título: Abrir Consola De Dos Desde Aplicasion Grafica
Publicado por: maikmr en Miércoles 24 de Agosto de 2005, 17:26
Hola compañeros del foro nesesito saber si alguien si alguien sabe como abrir desde una aplicacion grafica una consola del DOS para mandar a imprimir un mensaje cualquiera desde mi aplicasion grafica. por cierto estoy usando Visual C++.
gracias!!
Título: Re: Abrir Consola De Dos Desde Aplicasion Grafica
Publicado por: Eternal Idol en Miércoles 24 de Agosto de 2005, 17:29
Tenes que usar AllocConsole para abrir la consola. Con GetStdHandle conseguis stdin y stdout que despues podes usar con WriteFile y ReadFile.

 :devil:
Título: Re: Abrir Consola De Dos Desde Aplicasion Grafica
Publicado por: maikmr en Miércoles 24 de Agosto de 2005, 17:59
Me podria dar un ejemplo de la sintaxis para usar el AllocConsole.
Título: Re: Abrir Consola De Dos Desde Aplicasion Grafica
Publicado por: Eternal Idol en Miércoles 24 de Agosto de 2005, 18:01
Este es el prototipo:
BOOL AllocConsole(void);

La podes llamar asi de facil:
AllocConsole();
Título: Re: Abrir Consola De Dos Desde Aplicasion Grafica
Publicado por: maikmr en Miércoles 24 de Agosto de 2005, 18:12
No hay que hacer inclusion de alguna Librery en paraticular para el uso de esta funcion?

y otra cosa
Declaro e prototipo de la funcion deacurdo.
BOOL AllocConsole(void);

luego la invoco, muy bien.
AllocConsole();

Pero si quisiera manda a imprimir en esa consola que abri un mensaje como por ejemplo:

Hola mundo!
sera valido algo como esto?
[CODE]
BOOL AllocConsole(void){
cout << "Hola mundo" << "\n"
}
[CODE]

O la funcion ya esta definida?
Título: Re: Abrir Consola De Dos Desde Aplicasion Grafica
Publicado por: Eternal Idol en Miércoles 24 de Agosto de 2005, 18:17
Cita de: "maikmr"
No hay que hacer inclusion de alguna Librery en paraticular para el uso de esta funcion?

y otra cosa
Declaro e prototipo de la funcion deacurdo.
BOOL AllocConsole(void);

luego la invoco, muy bien.
AllocConsole();

Pero si quisiera manda a imprimir en esa consola que abri un mensaje como por ejemplo:

Hola mundo!
sera valido algo como esto?
[CODE]
BOOL AllocConsole(void){
cout << "Hola mundo" << "\n"
}
[CODE]

O la funcion ya esta definida?
La funcion ya esta definida en Wincon.h que esta incluido en Windows.h pero igual este codigo esta muy mal:

[code]
BOOL AllocConsole(void){
cout << "Hola mundo" << "\n"
}
[/code]

No podes redefinir la funcion y menos para ponerle ese codigo, como te decia antes para poder usar esa consola tenes que llamar a GetStdHandle y despues a ReadFile y WriteFile.
Título: Re: Abrir Consola De Dos Desde Aplicasion Grafica
Publicado por: maikmr en Miércoles 24 de Agosto de 2005, 18:27
No es que pretenda ser majadero todo lo contrario le agradesco por tomarce la molestia.

Pero entonces como le desia antes si quiero mandar a imprimir un mesaje cualquiera desde mi aplicasion a esa consola que abri, me dice que use las instrucciones GetStdHandle y despues a ReadFile y WriteFile. Pero cual serian la sintaxis con estas sentencias?

BOOL AllocConsole(void);

AllocConsole();

???????????????.
nuevamente grasias y disculpe la molestia!!!
Título: Re: Abrir Consola De Dos Desde Aplicasion Grafica
Publicado por: Eternal Idol en Miércoles 24 de Agosto de 2005, 18:34
Código: Text
  1.  
  2. AllocConsole();
  3. HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
  4. DWORD ret = 0;
  5. char str[] = &#34;hola mundo&#34;;
  6. WriteFile(hOut, str, strlen(str), &ret, 0);
  7.  
  8.  
Título: Re: Abrir Consola De Dos Desde Aplicasion Grafica
Publicado por: maikmr en Miércoles 24 de Agosto de 2005, 22:39
Ey compa;ero! quiero agradeserle por su colaboracion ahora solo queria saber si no sabe como puedo hacer para controlar la consola porque cuando cierro la consola se me cierra toda la aplicasion!! y necesito evitar eso!!

nuevamente gracias
Título: Re: Abrir Consola De Dos Desde Aplicasion Grafica
Publicado por: pililo en Sábado 25 de Junio de 2011, 13:20
Yo utilizo vc++ 2008 express, y me ha funcionado con lo siguiente:
Código: C++
  1.  
  2.  
  3. using namespace std;
  4. #using <system.dll>
  5. using namespace System::Diagnostics;
  6. using namespace System;
  7.  
  8.  

Luego, más adelante:
Código: C++
  1.  
  2. Console::Write("prueba de consola");
  3.  
  4.  

Antes, he tenido que abrir una consola con :

Código: C++
  1.  
  2. Alloconsole();
  3.  
  4.