C/C++: Projekt sowohl Command line als auch GUI

  • Ich hab ein Programm in C unter Windows, das mir viele alttägliche arbeiten automatisiert.
    Jetzt hab ich es aber (mit gcc 3.2) als Windows-Projekt ohne Fenster/Dialog konzipiert, damit mir nicht immer eine Konsole aufpoppt, wenn ich das programm starte. Es gibt in Dev-C++ zwar eine Option "don't create console window", wenn ich es als Kommandozeilen Programm compiliere, aber irgendwie klappt die nicht.

    jetzt würd ich aber gerne auch die option haben, wenn ich das programm von der kommandozeile aufrufe, dass ich printf() und scanf() machen kann, aber das geht nur wenn ich es als Command Line programm erstelle.

    hmm, hat irgendwer eine einfach lösung um das Aufpoppen der Kommandozeile zu verhindern, ohne bei jeder änderung immer manuell die optionen umstellen zu müssen, und einmal ein Windows-Programm und einmal ein CommandLine-Programm zu erstellen? Vielleicht irgendwelche Preprocessor commands?

  • Zitat von Irrlicht

    Du kannst ein normales Windows-Programm machen und in der WinMain einfach kein Fenster anlegen. Printf und scanf sollte da auch gehen, wenn du die stdio.h einbindest.

    Danke, für die Antwort, aber eben leider nicht, weil die ganzen consolen sachen dann auch nicht initialisiert werden.


    Ich habs jetzt einfach mal ganz arg hingepfuscht, und folgendes gemacht:
    --------
    char buffer[256];
    int hCrtIn, hCrtOut;
    FILE *conIn, *conOut;

    AllocConsole();
    hCrtIn = _open_osfhandle ((long) GetStdHandle(STD_INPUT_HANDLE), _O_TEXT);
    hCrtOut = _open_osfhandle ((long) GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
    conIn = _fdopen( hCrtIn, "r" );
    conOut = _fdopen( hCrtOut, "w" );
    *stdin = *conIn;
    *stdout = *conOut;
    fgets (buffer, 256, stdin);
    fprintf (stdout, buffer);
    system("PAUSE");
    FreeConsole();
    ------------

    ich erstell einfach ein WindowsProjekt, und wenn ich jetzt consolen output und input brauche, öffne ich mit AllocConsole() einfach eine neu console, und hol mir über low-level C-Funktionen die handles.
    funktioniert bis jetzt einwandfrei, außder dass ich auch eine neue console erstelle, wenn ich das programm schon von der command line aufrufe, aber es gibt (seit XP) auch noch einen AttachConsole() befehl, werd mich mal mit dem ein bisschen spielen....

    und da sagen die leute, Windows wäre nicht für die CLI ausgelegt - geht doch eh alles :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!