2009-03-07 18 views
15

Im aprendizaje de C++ y hice un nuevo programa y he eliminado una parte del código y ahora mi ventana de la consola no ocultará ¿Hay una manera de hacer que se esconden en el arranque sin ellos viéndoloprogramación de Win32 ventana de la consola ocultar

+0

publique el código que está causando el problema –

+1

Debería haber estado utilizando el control de fuente. De esa manera, podría volver a una versión anterior y ver qué salió mal. – Kibbee

Respuesta

26

Si estás escribiendo un programa de consola y desea desconecte su programa de la consola con la que comenzó, luego llame al FreeConsole. En última instancia, probablemente no estará satisfecho con lo que realmente hace esa función, pero esa es la respuesta literal a la pregunta que hizo.

Si está escribiendo un programa que nunca desea tener una consola en primer lugar, configure su proyecto para que no sea un programa de consola. "Consola" es una propiedad del archivo EXE. El SO lee esa configuración y decide si asigna una consola para su programa antes de que cualquiera de su código se ejecute alguna vez, por lo que no puede controlarlo dentro del programa. A veces, un programa que no es de consola se denomina "programa de GUI", por lo que puede buscar una opción entre "consola" y "GUI" en las opciones de configuración de su entorno de desarrollo. Sin embargo, configurarlo en la GUI no requiere que tenga ninguna interfaz de usuario. La configuración simplemente controla si su programa comienza con una consola.

Si usted está tratando de escribir un programa que a veces puede tener una consola y, a veces no es así, consulte una pregunta anterior, Can one executable be both a console and GUI app?

+11

Si ejecuta Mingw, puede configurar el modo de GUI agregando el indicador "-mwindows". – luiscubal

1

Puedes crear tu ventana minimizada. O pintarlo fuera de la pantalla visible.

Pero también podría haber jugado con las banderas de creación de ventanas. Si realmente arruinaste las cosas. A menudo es mejor comenzar una nueva ventana. (O restaurar desde una versión anterior, o la copia de seguridad).

7

Suponiendo que está en Windows, configure su enlazador para crear un programa de interfaz gráfica, no un programa de consola.

  • VS: Mire en pciones Linker en las propiedades del proyecto
  • LINK: añadir/SUBSISTEMA: WINDOWS
  • MinGW: -mwindows
+0

Cómo, esa es la pregunta. – Youda008

+0

@ Youda008: como parámetro del enlazador, uso '/ SUBSYSTEM: WINDOWS', usted debería. ;) – Macke

+0

y acabo de encontrar en MinGW que está hecho con param '-mwindows', ¿puedes agregar esto a la respuesta? – Youda008

4

Solía ​​usar ShowWindow (GetConsoleWindow(), SW_HIDE); en tal caso, sin embargo si hay necesidad de consola , así que no crees un proyecto de aplicación de consola.

+0

no ocultará la ventana sin SW_MINIMIZE HWND hWnd = GetConsoleWindow(); ShowWindow (hWnd, SW_MINIMIZE); ShowWindow (hWnd, SW_HIDE); – Ankur

+0

@Ankur, ¿has intentado y 'SW_HIDE' no funcionó? Porque funcionó para mí perfectamente. – ST3

3

Como ya se dijo, iniciar la aplicación con consola o no se establece en el exe. Usando el compilador GNU la opción se -mwindows de ninguna consola, por ejemplo

g++ -mwindows winapp.c 

parece que el método

#define _WIN32_WINNT 0x0500 
#include <wincon.h> 
.... 
    case WM_CREATE : 
     ShowWindow (GetConsoleWindow(), SW_HIDE); 

cierre todas las consolas de los padres, así que si inicia el winapp.exe de una consola de línea de comandos ¡esto también se cerrará!

5
#include <windows.h> 
#include <iostream> 
using namespace std; 
void Stealth() 
{ 
HWND Stealth; 
AllocConsole(); 
Stealth = FindWindowA("ConsoleWindowClass", NULL); 
ShowWindow(Stealth,0); 
} 

int main() 
{ 
    cout<<"this sentence is visible\n"; 
    Stealth(); //to hide console window 
    cout<<"this sentence is not visible\n"; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 
+2

Solo una pequeña mejora, puede usar GetConsoleWindow() en lugar de FindWindowA(). – davidnr

+0

Gracias @davidnr Lo modificaré :) – udit043

+0

@ udit043 ¿Hay alguna manera de volver a mostrar la ventana? – athos

1

Para literalmente Ocultar/mostrar la ventana de la consola en la demanda, se puede usar las siguientes funciones: Es posible ocultar/mostrar la consola mediante el uso de ShowWindow. GetConsoleWindow recupera el identificador de ventana utilizado por la consola. IsWindowVisible se puede utilizar para comprobar si una ventana (en ese caso, la consola) es visible o no.

#include <Windows.h> 

void HideConsole() 
{ 
    ::ShowWindow(::GetConsoleWindow(), SW_HIDE); 
} 

void ShowConsole() 
{ 
    ::ShowWindow(::GetConsoleWindow(), SW_SHOW); 
} 

bool IsConsoleVisible() 
{ 
    return (::IsWindowVisible(::GetConsoleWindow()) != FALSE); 
} 
+0

¿Qué tal una explicación, tal vez algunos enlaces de documentos? – SamB

+0

No puedo publicar más de 1 enlace. No tengo suficiente reputación. – nikau6

+0

Hmm, [eliminar nuevas restricciones de usuario] (http://stackoverflow.com/help/privileges/new-user) se supone que ocurre en 10 rep, ¿así que creo que ya tiene suficiente? – SamB

Cuestiones relacionadas