2013-08-08 21 views
7

Sto cercando di ottenere la forma principale di un processo che ho avviato, ma FromChildHandle e FromHandle restituiscono sempre null. il MainWindowHandle tuttavia è diverso da zero.Ottenere la forma di un processo figlio

IntPtr p = process_wrapper.MainWindowHandle; 
Form form = (Form) Control.FromChildHandle(p); 
if (form != null) 
{ 
    form.Close(); 
} 

risposta

2

È possibile recuperare un modulo solo come controllo, se il modulo in questione è stato generato dall'applicazione. Non è possibile recuperare un modulo da un altro processo, poiché il processo padre non è a conoscenza dell'handle < -> Mappatura di controllo del processo figlio.

Se si desidera "interrompere" il processo figlio (form.close()?), È possibile interrompere semplicemente l'intero processo. O "Clean", o per forza:

process.CloseMainWindow() vs process.kill()

+0

grazie. il processo è avviato dalla mia applicazione. quindi è un processo figlio. e voglio chiamare esplicitamente form.close() per testare qualcosa di specifico. – clamp

+0

@clamp Anche se il processo viene richiamato dal processo PARENT, è il processo figlio che sta creando il modulo e fa parte di un altro ambito applicazione. Ed è per questo che non puoi accedervi da ParentProcess. – dognose

+0

ok grazie. quindi non c'è modo di ottenere questo modulo? – clamp

Problemi correlati