Вы можете переопределить WndProc, а затем запустить собственное событие, когда оно будет вызвано. Это, конечно, не будет блокировать. Если вы хотите заблокировать до сообщения, вы можете иметь метод в другом потоке, ожидающий объект синхронизации и иметь сигнал WndProc об этом объекте.