2009-10-27 12 views
6

Ben Şimdiye kadar birlikte C uygulamasına benim C# uygulamasından mesaj göndermek için nasıl anladım var yerli C ile yazılmış başka bir uygulama ile iletişim kurmak için gereken bir C# uygulaması yazıyorum içinde WM_COPYDATA yapı alın User32.dll SendMessage. Ancak C# uygulamasının C uygulamasından ALICI mesajlarını nasıl alacağımı anlayamıyorum.WPF veya Konsol C# uygulaması

I WndProc yöntemini geçersiz kılma WinForms örnekleri gördük, ancak bir WPF veya konsol uygulamasında geçersiz kılmak için bir WndProc bir yöntem yoktur. Kesinlikle en azından bir Konsol uygulamasında yapmak mümkündür. Sağ?

cevap

8

Sen HwndSource.AddHook kullanarak WPF yapabilirsiniz:

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   
} 

Ne yazık ki, Konsol Uygulaması için hiçbir gerçek equivelent yoktur. Windows iletileri, tanım gereği, bir pencere tanıtıcısı (HWND) tarafından gönderilir ve alınır, dolayısıyla GUI uygulamalarıyla kullanılmak istenir.

ancak inter-process communication on Windows yapmanın anlamı, daha az tuhaf, diğer birçok vardır. Şahsen boru kullanmaktan hoşlanıyorum - adlandırılmış boruları kurmak hem yerel hem de yönetilen kodlarda çok iyi çalışır ve iki program arasında iletişim kurmak için çok verimlidir.