Melhor forma de “encaixar” uma terceira execução da aplicação de partido dentro de um painel Windows.Forms?
Pergunta
Atualmente, estou fazendo isso da seguinte forma:
// _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);
O problema que estou tendo com este código é que algumas partes da aplicação UI mais funcionar sem corretamente uma vez eu mudar o MainWindowHandle. (Ie: texto botões em falta)
Existe uma maneira de fazer isso sem causar problemas com a aplicação ancorado? (Seja através de .net ou user32)?
Solução
Em primeiro lugar, em vez de simplesmente esperar 1,5 segundos, tente chamar Você já está. procTest.
WaitForInputIdle
que esperar até que seu loop de mensagem é livre.
Em geral, eu não acho que é possível fazer isso sem modificar o programa que você está hospedando.
Editar : Você poderia tentar manter o outro programa acima de sua área de hospedagem, escondendo-se na barra de tarefas, removendo sua barra de título, movendo-o como seus movimentos de programas, etc. No entanto, isso ainda wouldn 't funcionar perfeitamente; Eu recomendo que você tenta encontrar alguma alternativa.
Tente entrar em contato com os desenvolvedores originais do aplicativo de terceiros e pedir seus conselhos.