2010-10-05 128 views
4

我有一组运行在任务托盘中的服务器应用程序。我正在尝试在c#中编写一个小巧的服务器管理应用程序,它可以优雅地关闭应用程序。然而,我很难找出如何做到这一点。关闭任务托盘应用程序

我可以得到进程(Process类的一个实例)。调用Process.CloseMainWindow()不起作用。你没有得到一个任务托盘进程的Process.MainWindowHandle(它是零,并且记录了这种情况),所以我不能发送WM_SYSCOMMAND,SC_CLOSE消息。

我可以杀死()它,但那不是优雅。有任何想法吗?服务器应用程序使用Delphi Win32编写。我可以修改它们。

回答

2

您可以使用pipes向他们发送消息。

2

您可以使用EnumWindows迭代窗口以查找与托盘图标关联的隐藏窗口。这一切都相当复杂和容易出错。这样做干净利落,让这些“服务器应用程序”创建一个命名管道。您可以使用众所周知的名称在您的经理应用中连接到他们,然后向他们发送命令。 System.IO.Pipes命名空间。

+0

我可以做到这一点,虽然我正在寻找一种方式发送关闭消息。这些应用程序有一个消息循环,因为没有主窗口,所以我只是无法找到一条消息进入它的方法。 – jackjumper 2010-10-08 15:23:33

+0

但是,感谢您的建议 – jackjumper 2010-10-08 15:27:20