Melhor forma de “encaixar” uma terceira execução da aplicação de partido dentro de um painel Windows.Forms?

StackOverflow https://stackoverflow.com/questions/1435358

  •  07-07-2019
  •  | 
  •  

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)?

Foi útil?

Solução

Em primeiro lugar, em vez de simplesmente esperar 1,5 segundos, tente chamar procTest. WaitForInputIdle que esperar até que seu loop de mensagem é livre. Você já está.

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top