Win32 als Prozess und als Konsole möglich?



  • Hallo,
    ich habe folgendes Problem. Ich habe eine WIN32 Applikation programmiert,
    welche kein Fenster oder Konsole beim start ausführt sondern lediglich
    als reiner Prozess im Hintergrund mitläuft (zu sehen im Task Manager
    unter Prozesse). Dieser Prozess hat die Aufgabe mittels Threads auf Events
    der VCP zu warten und bei Bedarf die Informationen mittels Sockets weiter
    zu reichen.

    Nun zum Problem. Wird dieser Prozess gestartet so ist er aktiv und ist im
    Task Manager zu sehen. Parallel dazu möchte ich nun aber nun noch ein Art
    Interaktion mit dem Prozess herstellen, für z.B. die Ausgabe von User
    Definierten Aspekten. Hierzu würde ich gerne auf eine simple Konsole zurück-
    greifen.

    Ich stelle mir vor, dass wenn man den Prozess ganz normal statet (mit
    Doppelklick auf die entsprechende EXE) dann startet das Programm und rennt
    wie gewollt im Task Manager. Wenn ich aber nun z.B. die Exe ausführe, in dem
    ich Ihr beim Start noch einen Parameter mit übergebe (z.B. Prozess.exe
    Konsole) dann soll das Programm in einer Konsole gestartet werden.

    Nur wie mache ich sowas? Eine Kompileranweisung ist das ja nicht direkt.
    Über die WINAPI Schnittstelle erhält das Programm den Zusatzparamter mittels
    wessen es entscheiden kann: Konsole bzw. nur Prozess.

    Kann mir jemmand sagen, wie ich sowas Source Code technisch realisieren kann?

    Vielen Dank und Grußi,
    Thorsten



  • Wie du schon sagtest - das Programm bekommt die übergebenen Parameter an die WinMain() bzw. main() übergeben. Das mußt du nur noch auswerten und je nach Wert die Konsole anzeigen lassen.

    int main(int argc,char*argv[])
    {
      if(argc>1&&strcmp(argv[1],"cfg")==0)
      {
        Konfig-Konsole einblenden
      }
      else
      {
        unsichtbar arbeiten
      }
    }
    

    Übrigens würde ich der Anwendung noch ein Tray-Icon spendieren (Stichwort: Shell_NotifyIcon().



  • Soweit so gut. Die Ausblendugn ist nicht das Problem.

    Was mir fehlt, ist, wie man es anstellt, dass Windof die Konsole
    aufmacht oder nicht...

    Grußi



  • AllocConsole sollte da helfen.

    Hier ist die Beschreibung in der MSDN: http://msdn2.microsoft.com/en-us/library/ms681944.aspx

    Da solltest du auch alle weiteren Funktionen zum Thema "Konsole" finden.



  • AllocConsole sollte da helfen.

    Hier ist die Beschreibung in der MSDN: http://msdn2.microsoft.com/en-us/library/ms681944.aspx

    Da solltest du auch alle weiteren Funktionen zum Thema "Konsole" finden.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Vielen Dank. Kann mir jemand den Source Code zukommen lassen bis die Konsole dann auch wirklich erscheint?

    Danke schön



  • Ich weiß jetzt nicht, was du höres willst, aber ein einfacher Aufruf von AllocConsole sollte reichen, damit die Konsole erscheint!

    AllocConsole();
    

    Fertig!

    Natürlich kannst du den Rückgabewert der Funktion noch auf Fehler testen.

    Mit ReadConsole und WriteConsole kannst du dann lesen und schreiben. Die benötigten Handles bekommst du von GetStdHandle. Das sollte aber alles auch in der MSDN beschrieben sein!

    Vergiss nicht, nacher auch FreeConsole aufzurufen 😉



  • Sorry. Funktioniert 🙂

    Jetzt habe ich wohl noch eine Frage:

    Hier

    int main(int argc,char*argv[])
    {
    if(argc>1&&strcmp(argv[1],"cfg")==0)
    {
    Konfig-Konsole einblenden
    }
    else
    {
    unsichtbar arbeiten
    }
    }
    komme ich problemlos an die übergebenen Parameter.

    Aber wie komme ich denn hier an die Parameter bzw. wie muss ich das
    Programm aufrufen/ausführen, damit ich in der Lage bin einen
    Parameter mit zu übergeben:

    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow )
    return 0;
    }

    Danke + Gruß,
    Thorsten



  • Da sollte GetCommandLine(); helfen.
    Die Funktion erwartet keine Parameter und liefert einen LPTSTR.

    MSDN:
    http://msdn2.microsoft.com/en-us/library/ms683156.aspx



  • OK.

    Fehlt mir nur noch, wie ich das Programm dann mit einem Parameter aufrufen
    kann?

    Wenn ich auf "ausführen" gehe, dort den Namen der Exe suche und anschließend
    einen Parameter eingebe, dann kommt von Windows eine Fehlermitteilung welche
    mir sagt, "... bla bla bla... konnte nicht gefunden werden.

    Ohne Parameter wird die Konsole jedoch gestartet.

    Gibt's da ne spezielle Signatur?

    Nochmals vielen Dank für die Superschnellen Antworten und die Klasse Hilfe 😉

    Thorsten



  • Nimm mal nicht ausführen, sondern erstelle eine Verknüpfung, bei der du dann unter Ziel den Parameter mit angibst.
    Aber ich weiß auch nicht, was da falsch ist^^, probier mal aus 😉



  • Hm...

    Funktioniert leider nicht so richtig... 😞

    Noch ne andere Idee?

    Gruß,
    Thorsten


Anmelden zum Antworten