♯さんお返事ありがとうございます。

AddMessageFilter を試してみました。でも私の思っている動作ではありませんでした。
ここまでやってみてはじめて気がついたのですが、
わたしが >>826 で書いた Win32 のメッセージループの API
GetMessage(), TranslateMessage(), DispatchMessage()
って、呼んだら新しいメッセージが来るまで処理を返さないんでしょうか?

だとしたら別のアプローチをしないといけないんですが…。
たとえば別のプログラムで、フォームとは関係ない処理が走っていて、
ポーリングして終了を感知したい場合
(こっちのプログラムにウィンドウメッセージが送られてこない場合でも、
その処理が終了する場合がある)
などは、このようなやり方ではできないんでしょうか?