Вы можете сделать это в 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 . Мне лично нравится использовать каналы - настройка именованных каналов работает очень хорошо как в собственном, так и в управляемом коде, и очень эффективна для связи между двумя программами.