2010-12-08 6 views
5

Ich habe eine C# -Anwendung, die ich anweisen möchte, schön herunterzufahren, aus einem anderen Prozess. Ich möchte auch in der Lage sein, es zu bitten, sein Hauptfenster zu öffnen. Ich habe einen Verweis auf den Hauptfenstergriff.Wie schließe ich ein Fenster von einem anderen Prozess

Ich weiß, dass ich es mit aufwendigen Schemata wie Remoting oder WCF tun kann. die Frage ist, kann ich es einfache Mechanismen wie Fenstermeldungen, oder die OnClose Ereignishandler des Fensters in der C# Anwendung

Antwort

6

Pinvoke Sendmessage(), um die Meldung von WM_CLOSE an der App-Hauptfenster zu senden. Es wird wahrscheinlich ziemlich schwierig sein, es zu fragen, um sein Hauptfenster zu öffnen. Sie können den Fenstergriff nicht erhalten, bis das Fenster erstellt ist. Process.Start() wäre der normale Weg.

Eine preisgünstige Alternative zu WCF und besser als Pinpoke ist eine Named Pipe oder ein Socket für die Schnittstelle zur App. Dazu muss der Quellcode der App geändert werden können.

+1

am Ende, ging ich mit diesem, Ansatz, mit zwei hilfreiche Antworten in anderen Fragen kombiniert: 1. [Wie Fenster Nachrichten in WPF zu behandeln] (http://StackOverflow.com/Questions/624367/How -to-handle-wndproc-messages-in-wpf) 2. [wie man eine Nachricht an alle Fenster sendet, einschließlich derer, die geschlossen/unsichtbar sind] (http://stackoverflow.com/questions/1777668/send- Message-to-a-Windows-Prozess-nicht-sein-Hauptfenster) –

2

Ich denke, dass Sie wahrscheinlich FindWindow verwenden könnten die richtige Kind Fenster zu finden und dann SendMessage oder PostMessage senden Sie eine WM_CLOSE.

Hier ist ein weiterer StackOverflow question, der sich damit in C# beschäftigt.

Bearbeiten: Obwohl wie die andere Antwort in dieser Frage sagt, können Sie Process.CloseMainWindow stattdessen verwenden.

0

Ich würde meine Zielanwendung zuerst "bewusst" machen, dass ein anderer Prozess das Schließen oder Öffnen eines Fensters oder das Ausführen einer Aktion auslösen möchte. Dies sollte ähnlich dem Aufruf einer Methode in einem anderen Prozess über die API- oder öffentlichen Methoden der Ziel-App implementiert werden. Wenn Sie nicht versuchen, etwas mit Anwendungen von Drittanbietern zu tun, sollten Sie nicht versuchen, sie direkt zum Schließen oder Herunterfahren zu senden.