Anwendung aus anwendung starten
-
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)
-
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??
-
In den Eigenschaften.
-
du meinst fenster markieren und über rechte maustaste ->eigenschaften oder wie
weil so ändert das nicht viel...
es sei den ich hab wieder mal alles verdreht....
-
Das kam mir in den Sinn.
Wenn du willst kannst du mir den Code mal zusenden und ich schaue mir mal an wo der Fehler sein könnte.
Ferndiagnosen sind immer schlecht
-
So kannst mir nicht sagen wo ich die grösse des fensters verändern kann,
vieleicht sollte ich die sdi anwendung immer in den vordergrund setzen.....
wäre aber auch blöd weil die fenster im hintergrund noch weiter bearbeiten müsste
-
Wieso auf einmal die größe???
Denn so wie ich das kapiere willst du aus dem Dialog eine SDI Anwendung starten und diese dann nach vorne setzten.
Entweder du gehst in den Resourcen Editor deines Dialoges und rufst die Eigenschaften deines Dialoges auf um nach zu schaun ob du eventuell dein Dialog immer in den Vordergrund stellst, oder du Minimierst deinen Dialog mit:::ShowWindow(this,SW_SHOWMINIMIZED);Dein Dialog ist dann noch da, aber die SDI ist vorne.
MFG
RS
-
Hallo,
das mit der grösse war nicht gemeint, da war ich wohl noch ein wenig in gedanken...
aber was schreib ich vor ::ShowWindow(this,SW_SHOWMINIMIZED);
und voralendingen wo setzte ich das hin???

-
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(); ::ShowWindow(this,SW_SHOWMINIMIZED); } else { MessageBox("nix"); }MFG
RS
-
zeigt es mir folgenden fehler an:
\Mat4x4Dlg.cpp(178) : error C2664: 'ShowWindow' : Konvertierung des Parameters 1 von 'class CMat4x4Dlg *const ' in 'struct HWND__ *' nicht moeglich Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat Fehler beim Ausführen von cl.exe.

-
Schreibe mal folgendes rein:
::ShowWindow(SW_SHOWMINIMIZED);sollte auch gehen.