WPFまたはコンソールC#アプリでWM_COPYDATA構造体を受信
-
06-07-2019 - |
質問
ネイティブ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つのプログラム間の通信に非常に効率的です。
所属していません StackOverflow