5

我有 ac# 应用程序,我想指示它从不同的进程很好地关闭。我还希望能够要求它打开其主窗口。我参考了它的主窗口句柄。

我知道我可以使用复杂的方案(例如远程处理或 WCF)来做到这一点。问题是我是否可以使用更简单的机制(例如窗口消息)或 c# 应用程序中窗口的 OnClose 事件处理程序来做到这一点

4

4 回答 4

7

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

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

于 2010-12-08T13:32:25.207 回答
3

Process.CloseMainWindow

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.closemainwindow.aspx

于 2010-12-08T13:30:32.340 回答
2

我认为您可能会使用它FindWindow来找到正确的子窗口,然后SendMessagePostMessage发送一个WM_CLOSE.

这是另一个有关在 C# 中执行此操作的 StackOverflow问题

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

于 2010-12-08T13:27:05.080 回答
0

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

于 2010-12-08T13:56:36.487 回答