Modo migliore per & # 8220; dock & # 8221; un'applicazione in esecuzione di terze parti all'interno di un pannello windows.forms?

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

  •  07-07-2019
  •  | 
  •  

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

È stato utile?

Soluzione

Prima di tutto, invece di aspettare 1,5 secondi, prova a chiamare procTest. WaitForInputIdle per attendere che il suo ciclo di messaggi sia libero. Lo sei già.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top