Anwendung aus anwendung starten
-
Ich denke mir das es einfacher ist eine zweite exe zu erstellen und diese dann mit ShellExecute zu starten.
-
hab ich ja
habe zwei unterschiedliche progs, die in unterschiedlichen ordner sind.
-
Hallo,
jetzt hab ich es so gemacht :
CString stropen; stropen = openfenster; openfenster.MakeUpper(); WinExec("k:\\\\...\\toll.exe",SW_SHOW);es geht, jetzt muss nur noch das fenster in den vordergrund
weiss du vielleicht wie das geht????
-
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 Titelleiste5000 (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)