7

ネイティブCで記述された別のアプリケーションと通信する必要があるC#アプリケーションを作成しています。これまで、User32.dll SendMessageを使用してC#アプリからCアプリにメッセージを送信する方法を理解しました。ただし、C#アプリでCアプリからメッセージを受信する方法を理解できません。

WinFormsでWndProcメソッドをオーバーライドする例を見てきましたが、WPFまたはコンソールアプリケーションでオーバーライドするWndProcメソッドはありません。確かに、少なくともコンソールアプリケーションで行うことは可能です。右?

4

1 に答える 1

9

これは、 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          
}

残念ながら、コンソールアプリケーションに相当するものはありません。Windowsメッセージは、定義上、ウィンドウハンドル(HWND)によって送受信されるため、実際にはGUIアプリケーションで使用することを目的としています。

ただし、Windowsでプロセス間通信を行う方法は他にもたくさんありますが、それほど奇妙ではありません。私は個人的にパイプを使用するのが好きです。名前付きパイプの設定は、ネイティブコードとマネージコードの両方で非常にうまく機能し、2つのプログラム間の通信に非常に効率的です。

于 2009-10-27T20:44:55.170 に答える