2010-10-05 107 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

相關問題