Meilleure façon de «ancrer» une application tierce exécutée dans un panneau windows.forms?
Question
Je le fais actuellement comme suit:
// _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);
Le problème que je rencontre avec ce code est que certaines parties de l'interface utilisateur de l'application ne fonctionnent plus correctement une fois que j'ai changé MainWindowHandle (c'est-à-dire: des boutons manquent de texte).
Existe-t-il un moyen de le faire sans causer de problèmes avec l’application ancrée? (Via .net ou user32)?
La solution
Tout d'abord, au lieu d'attendre simplement 1,5 seconde, essayez d'appeler Vous l'êtes déjà. procTest.
WaitForInputIdle
attendre que sa boucle de message soit libre.
En général, je ne pense pas qu'il soit possible de le faire sans modifier le programme que vous hébergez.
MODIFIER : vous pouvez essayer de garder l'autre programme au-dessus de votre zone d'hébergement en vous cachant dans la barre des tâches, en supprimant sa barre de titre, en le déplaçant au fur et à mesure que votre programme se déplace, etc. fonctionne pas parfaitement; Je vous recommande d'essayer de trouver une alternative.
Essayez de contacter les développeurs d'origine de l'application tierce et de leur demander conseil.