Modo migliore per & # 8220; dock & # 8221; un'applicazione in esecuzione di terze parti all'interno di un pannello windows.forms?
Domanda
Attualmente sto facendo questo come segue:
// _Container is the panel that the program is to be displayed in.
System.Diagnostics.Process procTest = new System.Diagnostics.Process();
procTest.StartInfo.FileName = "TEST.EXE";
procTest.StartInfo.CreateNoWindow = false;
procTest.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
procTest.Start();
procTest.WaitForInputIdle();
SetParent(procTest.MainWindowHandle, _Container.Handle);
MoveWindow(procTest.MainWindowHandle,
0, 0, _Container.Width, _Container.Height, true);
Il problema che sto riscontrando con questo codice è che alcune parti dell'interfaccia utente dell'applicazione non funzionano più correttamente dopo aver cambiato MainWindowHandle (ovvero: pulsanti mancanti di testo).
Esiste un modo per farlo senza causare problemi con l'applicazione ancorata? (O tramite .net o user32)?
Soluzione
Prima di tutto, invece di aspettare 1,5 secondi, prova a chiamare Lo sei già. procTest.
WaitForInputIdle
per attendere che il suo ciclo di messaggi sia libero.
In generale, non penso sia possibile farlo senza modificare il programma che stai ospitando.
MODIFICA : potresti provare a mantenere l'altro programma sopra l'area di hosting nascondendoti dalla barra delle applicazioni, rimuovendone la barra del titolo, spostandola mentre il programma si sposta, ecc. Tuttavia, ciò non farebbe comunque non funziona perfettamente; Ti consiglio di provare a trovare qualche alternativa.
Prova a contattare gli sviluppatori originali dell'applicazione di terze parti e chiedere il loro consiglio.