PDA

Ver la versión completa : [duda]Ocultar ventana en C++



McArio
19-05-2009, 16:46
¡Buenas!

Os expongo una duda a ver si alguno sabe como solucionar.

Estoy creando una pequeña aplicación en C++ con mi "Borland C++ 5.02" que no deseo que abra ninguna ventana.
La aplicación solo es para que escriba en un fichero los parámetros que se le pasan.

#include <stdio.h>
#include <conio.h>

int main (int argc, char *argv[]){
int cont;
FILE *fichero;
if(argc==1) return 1;
else{
if(!(fichero=fopen(argv[1],"ab"))) return 2;
else{
for(cont=2;cont<argc-1;cont++){
fputs(argv[cont],fichero);
fputs(" ",fichero);
}
fputs(argv[cont],fichero);
fputs("\r\n",fichero);
if(fclose(fichero)) return 3;
}
}
}

El problema esta en que cuando se ejecuta la aplicación por un instante se abre una ventana de CLI que me minimiza otra aplicación distinta que tengo a pantalla completa.

Por cierto mis conocimientos de C++ son algo limitados.
Si no se ha entendido mi duda dejar un comentario y tratare de expresarme de otra forma.

j8k6f4v9j
19-05-2009, 17:04
El problema que tienes con la ventana no es de C++ en sí mismo, sino del sistema operativo y el gestor de ventanas que estás usando.

Si yo ejecutase tu aplicación en mi sistema operativo (no incluiría conio.h :p) no se me abriría ninguna ventana, porque en ningún momento la estás creando. Lo que debes averiguar es cómo se llama a ese binario en tu sistema operativo sin que se abra una ventana.

Como sospecho de qué sistema se trata, cambio el hilo de sección.

Salu2

McArio
19-05-2009, 18:43
En efecto, se trata de windows. Concretamente Windows XP SP3.

Como comentas la conio.h no hace falta. Fue un fallo que se me paso ya que en otros programas suelo usar la funcion "getch()" para incluir pausas.

De todas formas mi duda aun sigue en pie. ¿Alguna sugerencia?

j8k6f4v9j
19-05-2009, 19:05
Como comentas la conio.h no hace falta. Fue un fallo que se me paso ya que en otros programas suelo usar la funcion "getch()" para incluir pausas.
Puedes usar char *fgets(char *s, int tam, FILE *flujo); para eso, definida también en stdio.h ;)


De todas formas mi duda aun sigue en pie. ¿Alguna sugerencia?
Hace muy poquito se publicó un post en el que se daban sugerencias sobre cómo ejecutar un batch en modo oculto. Una de las sugerencias era convertirlo en un ejecutable. Yo no soy fan de ese sistema operativo, pero si tú ya tienes el binario... supongo que lo único que te resta es llamarlo directamente en vez de hacerlo a través de una "terminal".

De todas formas, mejor espera a que alguien más entendido que yo en ese sistema te pueda orientar al respecto.

Salu2 !

Marchi
20-05-2009, 03:02
Hola McArio, tu aplicacion abre la ventana a la que te referis por que esta hecha para ejecutarse en consola. Una posibilidad seria hacer la aplicacion con winmain().

Otra cosa que creo que se puede hacer, es cambiar la forma de ejecucion del programa en las propiedades, y hacer que se ejecute minimizado. De esta forma se mostrara el icono en la barra de tareas, pero no se vera la ventana.


Saludos

hystd
20-05-2009, 04:56
Prueba con:



#include <stdio.h>
#include <conio.h>
#include <windows.h>

int main (int argc, char *argv[]){
FreeConsole();
int cont;
FILE *fichero;
if(argc==1) return 1;
else{
if(!(fichero=fopen(argv[1],"ab"))) return 2;
else{
for(cont=2;cont<argc-1;cont++){
fputs(argv[cont],fichero);
fputs(" ",fichero);
}
fputs(argv[cont],fichero);
fputs("\r\n",fichero);
if(fclose(fichero)) return 3;
}
}
}


Si no te va como quieres, la forma correcta de conseguirlo es indicándole al compilador que no muestre la consola. Esto depende del entorno que estés utilizando para programar en C. Por ejemplo en Visual Studio bastaría con quitar la directiva _CONSOLE.

Un saludo.