C# 如何从其他进程关闭窗口

C# 如何从其他进程关闭窗口,c#,wpf,windows,windowing,C#,Wpf,Windows,Windowing,我有一个c#应用程序,我想指示它从另一个进程很好地关闭。 我也希望能够要求它打开它的主窗口。 我引用了它的主窗口句柄 我知道我可以使用诸如远程处理或WCF等精心设计的方案来实现这一点。 问题是,我可以使用更简单的机制,比如窗口消息,或者c#应用程序中窗口的OnClose事件处理程序来完成它吗?我认为您可能可以使用FindWindow来找到正确的子窗口,然后SendMessage或PostMessage来发送WM\u CLOSE 下面是另一个StackOverflow,它处理在C#中执行此操作 编

我有一个c#应用程序,我想指示它从另一个进程很好地关闭。 我也希望能够要求它打开它的主窗口。 我引用了它的主窗口句柄

我知道我可以使用诸如远程处理或WCF等精心设计的方案来实现这一点。
问题是,我可以使用更简单的机制,比如窗口消息,或者c#应用程序中窗口的OnClose事件处理程序来完成它吗?我认为您可能可以使用
FindWindow
来找到正确的子窗口,然后
SendMessage
PostMessage
来发送
WM\u CLOSE

下面是另一个StackOverflow,它处理在C#中执行此操作


编辑:尽管如该问题的另一个答案所述,您可能可以使用
Process.CloseMainWindow

Process.CloseMainWindow

Pinvoke SendMessage()将WM_CLOSE消息发送到应用程序的主窗口。要求它打开其主窗口可能会非常困难,在创建窗口之前,您无法获得窗口句柄。Process.Start()将是正常的方式


WCF的一个低成本替代方案和pinvoke的优势是与应用程序接口的命名管道或套接字。这需要能够修改应用程序的源代码。

我首先要让我的目标应用程序“意识到”一个事实,即某些其他进程可能想要触发其关闭或打开窗口或执行任何操作。这应该类似于通过目标应用程序的api或公共方法在另一个进程上调用任何方法。。除非您正在尝试对第三方应用程序执行某些操作,否则我认为您不应该尝试直接向他们发送消息以关闭或关机。

最后,我采用了这种方法,并在其他问题中结合了两个有用的答案:1。2.