Anwendung aus anwendung starten



  • Du musst mit FindWindow das Handle der Anwendug holen und dann
    den Focus drauf setzten.

    MFG

    RS



  • kannst du mir das mal genauer erklären???



  • Servus,

    HWND hHandle = ::FindWindow(NULL, "FensterName");
    CWnd* pCwnd = FromHandle(hHandle);
    
    pCwnd->SetForegroundWindow();
    

    müsste so gehen habs aber nicht getestet 😃

    *winke*
    Hellsgore



  • Geht 😃 😃 😃



  • das kann ich aber auf meine erste lösung nicht anwenden oder???
    Das geht aber irgendwie nicht....



  • Ganz einfach:

    WinExec("k:\\\\...\\toll.exe",SW_SHOW);
    HWND hHandle = ::FindWindow(NULL, "FensterName"); //Der Fenstername steht oben in der Titelleiste
    CWnd* pCwnd = FromHandle(hHandle); 
    
    pCwnd->SetForegroundWindow();
    

    MFG
    RS



  • ja danke jetzt geht zwar das fenster auf, aber bevor es auf geht zeigt es mir noch ne fehlermeldung und dann schliesst sich die hauptanwendung....

    ich hab das jetzt so gemacht:

    CString stropen;
    
    	stropen = openfenster;
    	openfenster.MakeUpper();
    	WinExec("k:\\\\...\\toll.exe",SW_SHOW); 
    	HWND hHandle = ::FindWindow(NULL, "Toll"); //Der Fenstername steht    oben in der Titelleiste 
    
    	CWnd* pCwnd = FromHandle(hHandle);  
    
    	pCwnd->SetForegroundWindow();
    


  • Hauptsache es funktioniert 😃 😉 😃



  • 😃 😃 😃 😃
    sehr witzig
    😃 😃 😃 😃

    es wäre schon nicht schlecht wenn man danach noch das hauptprogr. danach noch benutzen könnte



  • Was für eine Meldung bekommst du denn?



  • Hallo,

    ich habe jetzt mit Projekt->dem Projekt hinzufügen einfach die dateien der sdi-anwendung hinzugefügt.
    Er hatte mir zuerst einen fehler angezeigt das stdafx und noch ein afx, das gleiche erstellen würde... da habe ich die kurzerhand gelöscht und jetzt zeigt er folgendes :

    fatal error C1083: vorkompilierte Header-Datei-Datei kann nicht geoeffnet werden: 'Debug/Start.pch': No such file or directory

    Die ist aber noch da, also die start.pch, nur im release ordner....
    Ich glaube das ich etwas vorschnell gehandelt habe mit dem löschen...

    kann mir einer einen tip geben??



  • Morgäään,

    Versuche doch erst mal die Projektmappe komplett neu zu erstellen.
    Das hat bei mir manchmal wunder bewirkt.

    MFG

    RS



  • moin,

    hat sich erledigt so wie heute morgen beschrieben mach ich es nicht, ich mach es so wie gestern.
    mitlerweile zeigt er jeine fehlermeldung mehr an, aber deswegen bleibt das hprog nicht da.
    naja da wird sich noch ne lösung finden lassen.... 🙄



  • Es sieht so aus als wenn er immer wenn er an diese stelle kommt alles schliesst:

    pCwnd->SetForegroundWindow();
    

    WEnn ich es weg lasse setzt er es wieder hinter die ganzen anderen fenster!!
    weiss jemand was anderes das ich für SetForegroundWindow(); einsetztem kann,
    ich habe schon einige probiert bei denen auch immer das gleiche passiert gleiche passiert........ aber das richtige habe ich noch nicht.



  • Das Fenster wird definitiv mit SetForgroundWindow in den Vordergrund geholt.

    Dein Problem liegt warscheinlich daran, dass er das Fenster nicht gefunden hat.

    Teste mal, ob der Zeiger auf das Fenster (CWnd) NULL ist.
    Das kann nämlich der Fall sein, wenn er das Fenster mit FindWindow nicht gefunden hat. Solltest Du eh auf jeden Fall absichern, da sonst immer die Gefahr besteht, dass Dir Dein Prog an der Stelle abschmiert.

    Manche Anwendungen benötigen auch eine gewisse Zeit zum Laden und dann findet er das Fenster noch nicht, wenn FindWindow unmittelbar nach WinExec oder ShellExecute aufgerufen wird. Vielleicht hilft ein Sleep zwischen WinExec und FindWindow.



  • Hallo,

    das testen kann ich doch so oder:

    if( pCwnd ==NULL)
    			MessageBox("Nix");
    		else
    			MessageBox("es geht");
    

    in dem fall gibt er nämlich "Nix" zurück......



  • Richtig. Also ist der Zeiger NULL, damit crashts beim Aufruf von SetForegroundWindow

    Willst Du SetForegroundWindow ausführen, sichere es ab:

    if (pCwnd)
      pCwnd->SetForegroundWindow();
    

    Er hat also das Fenster nicht gefunden.
    1. Entweder stimmt der Fenstertitel nicht, den Du bei FindWindow mitgegeben hast oder
    2. das Fenster ist noch nicht da, weil das Prog noch nicht komplett geöffnet wurde.

    Falls 1. nicht zutrifft, versuchs mal mit Sleep dazwischen:

    WinExec("k:\\\\...\\toll.exe",SW_SHOW);  
    Sleep(5000);
    HWND hHandle = ::FindWindow(NULL, "Toll"); //Der Fenstername steht oben in der Titelleiste
    

    5000 (5 sec) ist ziemlich lang, aber kannst Dich ja mit kleineren Werten runtertesten.
    (Bedenke aber, das manche Anwendung beim wirklich ersten Start, etwas länger brauch, als wenn sie das zweite mal aufgerufen wurde)



  • Hallo,

    jetzt sieht das so aus:

    WinExec("k:\\\\...\\toll.exe",SW_SHOW); 
    	Sleep(2500);
    	HWND hHandle = ::FindWindow(NULL, "toll"); //Der Fenstername steht oben in der Titelleiste 
    
    	CWnd* pCwnd = FromHandle(hHandle);  
    
    			if (pCwnd) 
    			{
    			pCwnd->SetForegroundWindow();
    			}
    			else
    			{
    			MessageBox("nix");
    			}
    

    jetzt zeigt das zu öffnede fenster unter den anderen fenster an und ohne das ich die fenster schliess komme ich nicht es ran und trotzdem zeigt er die messagebox, auch noch an....... 😞



  • Kann es sein das du deine erste Anwendung so definiert hast das diese immer im Fordergrund steht??? 😕



  • kann sein, aber nicht mit absicht,
    ich probiere schon die ganze zeit rum wie und wo man so etwas ändern kann,
    kannst du mir einen tipp geben??


Anmelden zum Antworten