C / c++ Anwendung ohne Win Fenster oder Konsolenfenster
-
C / c++ Anwendung ohne Win Fenster oder Konsolenfenster wie kann man das am einfachsten realisieren?
mfg
-
mit WinMain() und den richtigen Projekteinstellungen.
-
#pragma comment(linker, "/subsystem:windoof");
-
du erzeugest eine win32 anwendung per assistent (nicht Konsole) und entfernst alles, was mit mit fenstern zu tun hat
-
vlad_tepesch schrieb:
du erzeugest eine win32 anwendung per assistent (nicht Konsole) und entfernst alles, was mit mit fenstern zu tun hat
es poppt die konsole trotzdem kurz auf
-
Das programm soll nicht sichtbar sein nur im hintergrund laufen. Es ist ein backuptool. In der zeit in der es das backup durchführt will ich die konsole aber nicht sehen.
-
Compiler/IDE ?
-
IDE: Netbeans
Compiler: MinGW also gcc für c
-
Du brauchst auch keine Konsole, du erzeugst ganz einfach ein normales Fenster Projekt und setzt dein Hauptfenster auf SW_HIDE. Ein auf diese Weise erzeugtes Programm ist unsichtbar, im Anwendungsbereich des Taskmanagers ebenfalls, jedoch im Processbereich sichtbar.
-
Es funktioniert nun mit dem Window hide aber es poppt trotzdem noch einen leere Konsole auf. Woran liegt das?
#include <windows.h> /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); /* Make the class name into a global variable */ char szClassName[ ] = "WindowsApp"; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { HWND hwnd; /* This is the handle for our window */ MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */ /* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX); /* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; /* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0; /* The class is registered, let's create the program*/ hwnd = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Windows App", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 544, /* The programs width */ 375, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); /* Make the window visible on the screen */ //ShowWindow (hwnd, nFunsterStil); if(hwnd) { ShowWindow(hwnd, SW_HIDE); ShowWindow(hwnd, SW_HIDE); } /* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } /* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam; } /* This function is called by the Windows function DispatchMessage() */ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
-
weil du es als konsolenprojekt kompilierst.
-
Wo kann man das in netbeans ändern?
-
100% funktionieren das ganze nicht. Es wird immer das erzeugte fenster angezeigt und zusätzlich noch eine konsole. In IDEs wie Dev-cpp kann man ein window oder konsolen Projekt erstellen, hier funktioniert das ganze dann, nur in Netbeans suche ich immer noch vergeblich die Einstellung. der Umweg über Dev-cpp ist auf Dauer etwas stressig. Muss man hier vielleicht bestimmte make oder kompiler Parameter übergeben?
-
mache folgendes:
erstelle in neues win32 projekt mit dem assistenten.
Ersetze im main file alles durch folgendes:// testWin.cpp : Defines the entry point for the application. // #include "stdafx.h" #include <windows.h> int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { return 0; }
Aus den ressourceen kannst du auch alles löschen. Die Icon kannst du ja eventuell drin lassen
-
stdafx.h ist bei mri noch nicht vorhanden was ist mit dieser header möglich?
Kann man das ganze nicht so lösen das man dem Kompiler irgendwie klar macht das man keine konsolenanwendung erstellen will?
mfg
-
/ Nchtrag
Habe kein C++ projekt sondern C, stdafx.h ist doch eine header für c++ oder?
-
ok die lösung ist dem linker folgendes Parameter zu übergeben: -mwindows
-
Ich benutze Visual Studio 8 (2005). Kann mir einer sagen wo ich da diesen -mwindows Parameter setzten muss?
Ich will diese blöde Dosbox auch loswerden.
Da man aber trozdem argumente übergeben können muss kommt die Lösung von vlad_tepesch wohl nicht in Frage.
-
Project|Properties|..|Linker|Subsystem: WINDOWS
-
Erzeuge einfach ein ganz normales Win32 Projekt, kein Win32 Konsolen Projekt. Du brauchst dann garkein Fenster erstellen, denn die Nachrichten benötigst du ja schließlih nicht mehr, da du ja auch kein Fenster hast. Wenn du die Nachrichten trotzdem brauchst, lässt du einfach in der Message Loop die TranslateMessage() Funktion weg, und ermittelst die nachrihten indem du direkt die MSG struktur abfragst.
Ich muss aber sagen das ih den anschein habe das du überhaupt keine Ahnung hast was du da eigentlich machst.
Mach besser ein paar Tuts durch und les dir durch was drt steht und versuche es nach zu vollziehen. Niht einfach Kopieren->Einfügen-> Testen ob es geht ...