Programm über C++ öffnen und Task wechseln?



  • Hallo.

    Gibt es in der WinApi eine einfache Möglichkeit ein Programm, beispielsweise Windows-Paint über C++ zu öffnen?

    Kleiner Haken bei der Sache:
    Wenn bereits eine Instanz dieses Programms läuft soll nur zum entsprechenden Task gewechselt werden.

    Danke und beste Grüße



  • Starten kannst du das einfach wie eine exe (ist ja auch eine exe) mittels System(). Ob es schon aktiv ist kannst du machen in dem du die funktion FindWindow() benutzt.

    Das könnte dann so aussehen:

    if(!FindWindow("Paint", 0))
    {
        System("C:\\Windows\system32\mspaint.exe");
    }
    

    FindWindow liefert dir ein Handle zum Fenster Fenster zurük. Wenn das fenster nicht existiert ist der return wert NULL. System() startet eine exe, jedoch sieht man dann ein hässliches KonsolenFenster aufpoppen, wenn die funktion gestartet wird. Die WinAPI hat noch andere Funktionen zum starten von programmen, wo eine dabei war, wo kein Fenster aufpoppt, habe aber den namen vergessen.

    Bei findwindow musst du den fenster namen von Paint ageben, haben da aber jetzt den namen vergessen ... musste selber mal shauen



  • Code-Walker schrieb:

    Bei findwindow musst du den fenster namen von Paint ageben, haben da aber jetzt den namen vergessen ... musste selber mal shauen

    Hmmm... erstmal Danke.

    Da Paint nur eine Beispielanwendung ist und es mit jedem Programm dynamisch funktionieren soll bräuchte ich ja dann eine Funktion die mir das jeweilige Programm öffnet und mit den Fensternamen zurück gibt.

    Und leider braucht die Funktion findwindow http://msdn.microsoft.com/en-us/library/ms633499(VS.85).aspx den korrekten Namen des Fensters.



  • Du willst das Fenster also öffnen und direkt nach dem Öffnen den Fensternamen haben? Bzw. ohne den Namen angegeben zu haben?



  • Dann ist vielleicht EnumWindows was für dich (warum suchst du denn nicht mal selbst?)

    Du gehst alle Fenster durch, holst dir den Fenstertitel (suche) oder Wahlweise den Fensterklassennamen (suche!) und überprüfst, ob der Titel des zu suchenden Fensters ein Teilstring des Titels eines der enumerierten Fenster ist.



  • Xantus schrieb:

    Dann ist vielleicht EnumWindows was für dich (warum suchst du denn nicht mal selbst?)

    Du gehst alle Fenster durch, holst dir den Fenstertitel (suche) oder Wahlweise den Fensterklassennamen (suche!) und überprüfst, ob der Titel des zu suchenden Fensters ein Teilstring des Titels eines der enumerierten Fenster ist.

    Klar suche ich selbst, ich dachte nur dass vielleicht jemand eine schnelle Antwort parat hätte^^

    Die Suche Substring ist ne super Idee... Danke



  • FindWindow wär da besser geeignet.
    und statt system sollte man ShellExecute benutzen.


  • Mod

    Welchen Sinn soil das machen?
    Was nützt es eine bestehende Instanz von MS-Paint zu öffnen wenn man nicht weiß, oder beeinflussen kann was bearbeitet wird.

    Hat das Programm eine COM/Automationsschnittstelle? Dann nimm diese.



  • Und irgent wie finde ich es unlogisch ein Fenster zu öffnen, bei dem du den Namen nicht weißt. Möchtest du etwa alle Fenster öffnen. Ohne den Namen kann man halt kein Fenster öffnen, C++ kann sich ja schlecht einfach irgent eines raussuchen.


Anmelden zum Antworten