2009-10-27 10 views
6

में WM_COPYDATA संरचना प्राप्त करें मैं एक सी # एप्लिकेशन लिख रहा हूं जिसे देशी सी में लिखे गए किसी अन्य एप्लिकेशन के साथ संवाद करने की आवश्यकता है। अब तक मुझे पता चला है कि मेरे सी # ऐप से सी ऐप में संदेश कैसे भेजना है User32.dll SendMessage। हालांकि मैं सी ऐप से सी प्राप्त करने के लिए सी # ऐप प्राप्त करने का तरीका समझने में असमर्थ हूं।WPF या कंसोल सी # एप

मैं WndProc विधि अधिभावी की WinForms उदाहरण देखा है, लेकिन वहाँ एक WPF या कंसोल आवेदन में ओवरराइड करने के लिए कोई WndProc विधि है। निश्चित रूप से कम से कम एक कंसोल अनुप्रयोग में करना संभव है। सही?

उत्तर

8

आप HwndSource.AddHook का उपयोग कर WPF में कर सकते हैं:

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   
} 

दुर्भाग्य से, वहाँ एक कंसोल आवेदन के लिए कोई वास्तविक बराबर है। परिभाषा के अनुसार, विंडोज संदेश एक विंडो हैंडल (एचडब्ल्यूएनडी) द्वारा भेजे जाते हैं और प्राप्त होते हैं, इसलिए वे वास्तव में जीयूआई अनुप्रयोगों के साथ उपयोग किए जाने वाले हैं।

वहाँ कई अन्य, कम अजीब हैं, inter-process communication on Windows करने का मतलब है, लेकिन। मैं व्यक्तिगत रूप से पाइप का उपयोग करना पसंद करता हूं - नामित पाइप सेट करना मूल और प्रबंधित कोड दोनों में बहुत अच्छी तरह से काम करता है, और दोनों कार्यक्रमों के बीच संचार के लिए बहुत ही कुशल है।

संबंधित मुद्दे