これは、 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つのプログラム間の通信に非常に効率的です。