Получите структуру WM_COPYDATA в WPF или Консольном приложении C #

StackOverflow https://stackoverflow.com/questions/1633501

Вопрос

Я пишу приложение на C #, которое должно взаимодействовать с другим приложением, написанным на нативном языке C. До сих пор я выяснил, как отправлять сообщения из моего приложения C # в приложение C с помощью UserM.dll SendMessage. Однако я не могу понять, как заставить приложение C # получать сообщения из приложения C.

Я видел в WinForms примеры переопределения метода WndProc, но в WPF или консольном приложении нет метода WndProc для переопределения. Конечно, это можно сделать как минимум в консольном приложении. Правильно?

Это было полезно?

Решение

Вы можете сделать это в 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          
}

К сожалению, консольного приложения не существует. Сообщения Windows по определению отправляются и принимаются дескриптором окна (HWND), поэтому они действительно предназначены для использования с приложениями с графическим интерфейсом.

Существует множество других, менее странных способов выполнения межпроцессное взаимодействие в Windows , однако. Мне лично нравится использовать каналы - настройка именованных каналов очень хорошо работает как в собственном, так и в управляемом коде, и очень эффективна для связи между двумя программами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top