【发布时间】:2010-12-08 13:24:45
【问题描述】:
我有一个 c# 应用程序,我想指示它从不同的进程很好地关闭。 我还希望能够要求它打开其主窗口。 我引用了它的主窗口句柄。
我知道我可以使用复杂的方案(例如远程处理或 WCF)来做到这一点。 问题是我是否可以使用更简单的机制(例如窗口消息或 c# 应用程序中窗口的 OnClose 事件处理程序)来做到这一点
【问题讨论】:
我有一个 c# 应用程序,我想指示它从不同的进程很好地关闭。 我还希望能够要求它打开其主窗口。 我引用了它的主窗口句柄。
我知道我可以使用复杂的方案(例如远程处理或 WCF)来做到这一点。 问题是我是否可以使用更简单的机制(例如窗口消息或 c# 应用程序中窗口的 OnClose 事件处理程序)来做到这一点
【问题讨论】:
Pinvoke SendMessage() 将 WM_CLOSE 消息发送到应用程序的主窗口。要求它打开其主窗口可能会非常困难,在创建窗口之前您无法获得窗口句柄。 Process.Start() 将是正常的方式。
WCF 的一种低成本替代方案,优于 pinvoke 的是命名管道或与应用程序交互的套接字。这需要能够修改应用程序的源代码。
【讨论】:
Process.CloseMainWindow
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.closemainwindow.aspx
【讨论】:
我认为您可以使用FindWindow 找到正确的子窗口,然后使用SendMessage 或PostMessage 发送WM_CLOSE。
这是另一个 StackOverflow question 处理在 C# 中执行此操作。
编辑:尽管正如该问题中的其他答案所说,您也许可以改用Process.CloseMainWindow。
【讨论】:
我首先要让我的目标应用程序“意识到”某个其他进程可能想要触发其关闭或打开窗口或执行任何操作的事实。这应该类似于通过目标应用程序的 api 或公共方法在另一个进程上调用任何方法来实现。 ..除非您尝试使用 3rd 方应用程序做某事,否则我认为您不应该尝试直接向它们发送消息以关闭或关闭。
【讨论】: