C'è un modo per avere un processo creato da CreateProcess aperto all'interno di un'altra finestra?
-
04-10-2019 - |
Domanda
Voglio essere in grado di aprire un'applicazione GUI utilizzando CreateProcess in un processo principale e avere la visualizzazione grafica in una finestra creo dall'interno del processo principale. Qualcuno sa come raggiungere questo obiettivo? Grazie!
Soluzione
Se si è in controllo di entrambe le applicazioni allora sì.
Questo è il modo visualizzazione screen saver nel pannello di controllo screen saver - il pannello di controllo passava davanti alla finestra di dialogo nella riga di comando, e il file .scr - che è solo un semplice exe - crea la sua finestra come un bambino usando lo specifico hWnd come suo genitore.
Acquisizione di una finestra di primo livello scritto in precedenza e costringendolo a esistere all'interno della propria struttura non è però ben supportato.
Anche in questo caso, si tratta di qualcosa che si può easilly provare: ho scritto un'applicazione di test che ha creato una finestra cornice vuota, fatto un FindWindow per le copie di Blocco note e reparented la finestra di blocco note per essere un figlio del mio telaio
.Così funziona: in questo scenario semplice, almeno, ma non v'è alcuna garanzia: le applicazioni più complesse che modificare i propri stili della struttura potrebbe benissimo rompere, inoltre avere una finestra bambino e finestra padre sui thread diversi introduce la possibilità di deadlock.
Altri suggerimenti
No, non si può fare questo.
Una cosa che lavoro potrebbe ... Si potrebbe iniziare il processo, però, e quindi utilizzando l'handle della finestra applicare una serie di modifiche alla finestra per togliere il telaio. Poi si potrebbe spostarlo nella posizione di qualche altro controllo di posizionamento nella finestra e quando si hanno gli eventi spostare / ridimensionare anche di ridimensionare questa finestra secondaria.