Anwendung aus anwendung starten
-
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.
-
dann kommt das:
ShowWindow' : Funktion akzeptiert keine 1 Parameter
tue ich vorne statt this NULL reinschreiben zeigt es zwar keine fehler,
öffnet aber nicht das programm...
-
Du musst ja noch das HWND mitgeben, oder wenn du in einem CWnd bist die Doppelpunkte weglassen. Ist es so schwer mal in der Doku zu lesen?
-
Dann setze es mal vor den SetActiveWindow...bla und füge als ersten wert GetActiveWindow(),... ein.
MFG
RS
-
ich weiss das ich keine ahnung habe, aber wo steht das mit diesem setaktivewindow??????
-
Sorry ich meinte pCwnd->SetForegroundWindow();
-
und wie sieht das dann ausgeschrieben 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) { ::ShowWindow(GetActiveWindow(),SW_SHOWMINIMIZED); pCwnd->SetForegroundWindow(); } else { MessageBox("nix"); }