¿Cómo programarías una aplicación C/C++ que podría ejecutarse sin abrir una ventana o consola?Crear una aplicación sin una ventana
Respuesta
Cuando se escribe un programa WinMain, se obtiene automáticamente la opción/Subsistema que debe ventanas en el compilador. (Suponiendo que use Visual Studio). Para cualquier otro compilador, una opción similar podría estar presente, pero el nombre de la bandera podría ser diferente.
Esto hace que el compilador cree una entrada en el formato de archivo ejecutable (PE format) que marca el ejecutable como un ejecutable de Windows. Una vez que esta información está presente en el ejecutable, el cargador del sistema que inicia el programa tratará su binario como un ejecutable de Windows y no un programa de consola y por lo tanto no provoca que las ventanas de la consola se abran automáticamente.
Pero un programa de Windows no necesita crear ninguna ventana si no lo desea, al igual que todos los programas y servicios que ve ejecutándose en la barra de tareas, pero no ve las ventanas correspondientes para ellos. Esto también puede suceder si crea una ventana, pero opta por no mostrarla.
Todo lo que tiene que hacer, para lograr todo esto es,
#include <Windows.h>
int WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int cmdShow)
{
/* do your stuff here. If you return from this function the program ends */
}
La razón necesita una misma WinMain es que una vez que marque el subsistema de Windows, el enlazador supone que su función de punto de entrada (que se invoca después de que se carga el programa y la biblioteca C Run Time se inicializa) será WinMain y no main. Si no proporciona un WinMain en dicho programa, obtendrá un error de símbolo no resuelto durante el proceso de vinculación.
Tengo un requisito similar cuando uso un temporizador. quiero que el programa se ejecute sin parar. En este programa, se ha configurado un temporizador. Entonces, ¿cómo lo hago? ? –
no debería ser int WINAPI WinMain (...)? – uceumern
en Windows:
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// <-- Program logic here
return 0;
}
Asegúrese de utilizar el modificador de vinculador/subsistema mencionadas por Adam Mitz.
En otras plataformas:
int main(int argc, char**argv)
{
// <-- Program logic here
return 0;
}
Dos quejas: WinMain es innecesario si no incluye windows.h; y devuelve 0; es opcional en main. – coppro
Desea devolver 0 para que pueda indicar el éxito de los programas que lo llaman. –
Si crea una aplicación de consola y tiene int main para Windows, tendrá una ventana emergente de consola cuando haga doble clic en el archivo ejecutable. –
Si está utilizando MSVC o Visual Studio sólo tiene que utilizar el nuevo asistente de proyectos y seleccione la aplicación de consola .
la aplicación de consola siempre abrirá una ventana de consola cuando se ejecute – computinglife
¿Estás seguro de que sabes de lo que estás hablando? http://en.wikipedia.org/wiki/Win32_console Creo que no! La última vez que miré una aplicación de consola fue una aplicación win32 no gui !!! – jussij
jussij - Correcto. es una aplicación CLUI. y para interactuar con esa CLUI, Windows crea una GUI CL para usted. – Aaron
Si tiene una necesidad de ejecutar contiguamente su programa sin tener consola o ventana, puede encontrar deamon on *NIX o services on Windows, este ejemplo de .NET si necesita win32 simple solo un poco de google para la muestra.
Dado que su pregunta está etiquetada como win32 supongo que los servicios son más relevantes para usted.
Utilice el asistente de Visual Studio para crear la aplicación Win32. Pero no cree la ventana, es decir, elimine la función de creación de ventana. Alternativamente, podemos crear la aplicación Win Service.
En Visual Studio Express 2010 después de configurar el subsistema a Windows (como lo sugiere el usuario17224), alternativamente cambiar el principal a WinMain (como lo sugieren el usuario17224 y Brian R. Bondy), se puede establecer la función de entrada en main en propiedades, vinculador, avanzado, punto de entrada: simplemente escriba main en el cuadro de texto.
- 1. Cómo iniciar una aplicación mac sin una ventana de terminal
- 2. Crear una aplicación para iPhone sin Xcode
- 3. Win32, C++: Crear una ventana emergente sin robar el foco
- 4. Biblioteca de entrada Linux/X11 sin crear una ventana
- 5. Crear un botón de tweet sin abrir una nueva ventana
- 6. ¿Puedes crear contexto OpenGL sin abrir una ventana?
- 7. ¿Crear una aplicación de escritorio (ventana) que se pueda ejecutar sin instalar?
- 8. aplicación de Mac sin ventana
- 9. Incrustar una aplicación en una ventana
- 10. Cargando una ventana de WPF sin mostrarlo
- 11. Crear una aplicación plist
- 12. Hacer una ventana sin bordes con Qt
- 13. Cómo crear mediante programación una ventana WPF en una aplicación WinForm
- 14. ¿Es posible crear una aplicación para iPhone sin productos Apple?
- 15. Cómo crear una ventana pura de winapi
- 16. ¿Cómo crear una ventana emergente en android?
- 17. Crear una ventana de HUD programáticamente
- 18. Cómo crear una ventana oculta en C++
- 19. Crear una tabla sin columnas
- 20. Abrir página en una nueva ventana sin ventana emergente
- 21. Abrir una ventana sin diferencias en vimdiff
- 22. ¿Cómo puedo hacer que una ventana Acerca de sea la ventana más frontal en una aplicación Cocoa sin UI?
- 23. Cómo crear una actividad transparente SIN windowIsFloating
- 24. ¿Cómo crear una aplicación SaaS?
- 25. Crear una ventana en qt con forma de una imagen
- 26. ¿Cómo imprimir una página web sin abrir una ventana emergente?
- 27. Uso de SyncAdapter sin crear una cuenta
- 28. Agregando una ventana de preferencias a una aplicación Mac
- 29. Agregar una ventana de ayuda a una aplicación - C#
- 30. ¿Se puede utilizar NSAlert para crear una ventana flotante?
hilo relacionadas: http://stackoverflow.com/questions/13051412/how-to-hide-the-console-window-in-a-win32-project-using-visual-studio-2010 – BuvinJ