¿Cómo ocultar la ventana de la consola con WinAPI?

Estoy tratando de ocultar la ventana de la consola cuando mi aplicación C se lanza con este simple código WinAPI :

#define CONSOLE_NAME "6FD66E14-FF0F-4B94-B8AF-AFE3D42DC399" void hide_window(void) { // Ставим заголовок для консольного окна / Setting window caption SetConsoleTitle(TEXT(CONSOLE_NAME)); // Находим по заголовку Handle для окна / Searching Handle of the window HWND hWnd = FindWindow(NULL, TEXT(CONSOLE_NAME)); if (hWnd == 0) { ErrorExit(TEXT("FindWindow")); } // Скрываем консоль / Hidding console ShowWindow(hWnd, SW_HIDE); } int _tmain(int argc, _TCHAR* argv[]) { hide_window(); /* other code */ } 

Todo funciona bien, si no hay antivirus activado, pero cuando Kaspersky se está ejecutando y monitorea el sistema, no puedo hacer funcionar el código anterior, porque hWnd == 0 es verdadero y GetLastError() = 183 error (” No se puede crear un archivo cuando ese archivo ya existe “.

Pregunta: ¿Qué puedo hacer? Todo lo que necesito es ocultar esa ventana de consola.

Por favor, ayúdame con esto.

¡Muchas gracias!

PD. Usando Visual Studio 2010 (Visual C ++)

Simplemente llame a FreeConsole() para deshacerse de él y AllocConsole() para crear uno nuevo.

Sería mejor crear un nuevo proyecto de Visual Studio basado en ‘Proyecto Win32’ en lugar de ‘Aplicación de consola Win32’. Entonces una consola no se creará automáticamente. (Aún puede crear uno en el código si lo desea). Esto establecerá la configuración del comstackdor / SUBSYSTEM: WINDOWS entre otros.

No tiene que crear una GUI en una aplicación que no sea de consola, y no tiene que tener una función WndProc ().

En respuesta a “@Ian Goldby, ¿podría darme el enlace al código fuente de cómo hacerlo?”

No hay ningún código fuente como tal. Simplemente cree un nuevo Proyecto Win32 de Visual C ++ (no la aplicación de consola Win32). En el asistente, asegúrese de que la aplicación de Windows está seleccionada. El asistente generará una gran cantidad de código de plantilla, pero puede eliminar todo esto excepto el esqueleto de la función _tWinMain (). Esta es la función a la que se llamará cuando se inicie la aplicación. Solo pega tu propio código aquí.

Alternativamente, marque la casilla ‘Proyecto vacío’ en la última etapa del asistente, y proporcione su propio archivo main.c y su propia función _tWinMain (). Usted puede encontrar esto más fácil.

De cualquier manera, su aplicación se ejecutará como antes, excepto que, debido a que es una aplicación GUI en lugar de una aplicación de Consola, el sistema operativo no creará automáticamente una ventana de Consola cuando se inicie. (Obviamente, las funciones como printf / scanf, etc. no funcionarán).