2009-10-27 108 views
6

我寫需要寫在本地C.到目前爲止,我已經找到了如何從我的C#應用​​程序將消息發送到與還原C應用其他應用程序進行通信的C#應用​​程序User32.dll SendMessage。但我無法弄清楚如何讓C#應用從C應用程序接收消息。接收WM_COPYDATA結構在WPF或控制檯C#應用程序

我看到重寫WndProc方法的的WinForms的例子,但沒有WndProc方法在WPF或控制檯應用程序重寫。至少可以在控制檯應用程序中執行。對?

回答

8

您可以使用WPF做HwndSource.AddHook此:

private HwndSource hwndSource; 
void MyWindowClass_Loaded(object sender, RoutedEventArgs e) 
{ 
    hwndSource = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle); 
    hwndSource.AddHook(new HwndSourceHook(WndProc)); 
} 
private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
{ 
    // Process your windows proc message here   
} 

不幸的是,對於一個控制檯應用程序沒有真正equivelent。 Windows消息,根據定義,發送,並通過窗口句柄(HWND)接受,所以他們真的是爲了與GUI應用程序中使用。

還有很多其他的,少奇,意味着做inter-process communication on Windows,但是。我個人比較喜歡使用管道 - 建立命名管道的作品相當不錯,在本地和託管代碼,並且是兩個程序之間的通信效率非常高。