質問

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

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

役に立ちましたか?

解決

HwndSourceを使用して、WPFでこれを行うことができます。 .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)によって送受信されるため、実際にはGUIアプリケーションで使用することを意図しています。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top