2013-08-08 4 views
7

Ich versuche, die Hauptform eines Prozesses zu erhalten, den ich startete, aber das FromChildHandle und das FromHandle geben immer null zurück. Der MainWindowHandle ist jedoch ungleich Null.Erhalten der Form eines Childprocess

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

Antwort

2

Sie können ein Formular nur als Steuerelement abrufen, wenn das betreffende Formular von Ihrer Anwendung generiert wurde. Sie können ein Formular nicht aus einem anderen Prozess abrufen, da Ihr übergeordneter Prozess das Handle < -> Steuerelementzuordnung des unterordneten Prozesses nicht kennt.

Wenn Sie nur den untergeordneten Prozess "stoppen" möchten (form.close()?) Sie können den gesamten Prozess einfach stoppen. Entweder "Clean", oder mit Gewalt:

process.CloseMainWindow() vs process.kill()

+0

Dank. Der Prozess wird von meiner Anwendung aus gestartet. es ist also ein Kindprozess. und ich möchte explizit form.close() aufrufen, um etwas Bestimmtes zu testen. – clamp

+0

@clamp Auch wenn der Prozess von Ihrem PARENT-Prozess aufgerufen wird, ist es der untergeordnete Prozess, der das Formular erstellt, und dies ist Teil eines anderen Anwendungsbereichs. Aus diesem Grund können Sie nicht über den ParentProcess darauf zugreifen. – dognose

+0

ok danke. also gibt es keine Möglichkeit, dieses Formular zu bekommen? – clamp

Verwandte Themen