2010-03-04 118 views
0

我一直在嘗試使用WM_COPYDATA發送來自兩個.NET Windows窗體應用程序的消息,並且它工作得很好。發送消息到.NET控制檯應用程序

我想知道這是否可以與控制檯應用程序完成。

所有SendMessage函數接受一個窗口句柄後,如何獲得控制檯應用程序的窗口句柄?

[DllImport("User32.dll")] 
public static extern Int32 SendMessage(int hWnd, int Msg, int wParam, [MarshalAs(UnmanagedType.LPStr)] string lParam); 

我還需要在控制檯應用程序中設置某種消息循環才能接收消息嗎?

+0

@GX:在我的答案的第一個鏈接中,有一個更新版本的代碼,可以滿足Windows服務和控制檯的需求... – t0mm13b 2010-03-04 01:32:35

回答

3

最常見的IPC方法(除了WM_COPYDATA)是內存映射文件和命名管道。我建議你看看後者。

MSDN有一個example of named-pipe communication。具體來說,您需要使用的類別爲NamedPipeServerStreamNamedPipeClientStream,它們的行爲與創建普通網絡流時的行爲基本相同。

好的是,它也可以通過網絡工作,雖然你也可以在單臺機器上使用它。

在控制檯應用程序中設置實際的Windows消息循環很複雜,至少可以說。如果你真的需要這樣做,這是一個相當冗長的article on the subject。如果你想要做的只是傳輸數據,我強烈推薦使用命名管道;如果你實際上不需要處理標準的Windows消息,那麼這是不值得的。

+0

是的我聽說過命名管道,從來沒有嘗試過實現它們。 謝謝你的良好的資源鏈接 – 2010-03-04 01:18:42

1

@ tommieb75:XDMessaging其實是我的圖書館:) WM_COPYDATA不會控制檯應用程序工作,因爲他們沒有消息泵。然而,該庫包含一個基於IOStream的IPC實現,可用於控制檯應用程序和服務。 http://thecodeking.github.com/XDMessaging.Net/

+0

這並沒有提供一個問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 – 2015-04-19 09:24:09

+0

我在發佈時沒有足夠的代表添加評論。 – TheCodeKing 2015-04-19 13:15:30

相關問題