2009-10-27 24 views
6

Tôi đang viết một ứng dụng C# cần giao tiếp với một ứng dụng khác được viết bằng ngôn ngữ C. Cho đến nay tôi đã tìm ra cách gửi tin nhắn từ ứng dụng C# đến ứng dụng C với User32.dll SendMessage. Tuy nhiên tôi không thể tìm ra cách để ứng dụng C# nhận được tin nhắn từ ứng dụng C.Nhận WM_COPYDATA struct trong WPF hoặc Console C# app

Tôi đã thấy các ví dụ về WinForms ghi đè phương pháp WndProc, nhưng không có phương pháp WndProc để ghi đè trong ứng dụng WPF hoặc Console. Chắc chắn nó có thể làm trong một ứng dụng Console ít nhất. Đúng?

Trả lời

8

Bạn có thể làm điều này trong WPF sử dụng 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   
} 

Thật không may, không có equivelent thực sự cho một ứng dụng Console. Thông điệp Windows, theo định nghĩa, được gửi và nhận bởi một cửa sổ xử lý (HWND), do đó, họ thực sự có nghĩa là để được sử dụng với các ứng dụng GUI.

Tuy nhiên, có rất nhiều cách khác, ít lẻ, có nghĩa là thực hiện inter-process communication on Windows. Cá nhân tôi thích sử dụng đường ống - thiết lập các đường ống có tên hoạt động rất tốt ở cả mã gốc và mã được quản lý, và rất hiệu quả cho việc giao tiếp giữa hai chương trình.

Các vấn đề liên quan