_DPIEWebBrowserEvents2で処理するのはひとまず諦めて、他の通知メッセージを使って試すことにしました。リンクをクリックされたときには、NM_HOTSPOTが来るようなのでそれを処理し、リモートのインラインのイメージなどを取得するかどうかを指定するためにNM_INLINE_IMAGE, NM_INLINE_SOUND, NM_INLINE_XMLを処理するようにしてみました。
これらの通知メッセージはNM_HTMLVIEWを使って通知されるようになっていて、UNICODEが定義されている場合*1にはこれはNM_HTMLVIEWWなのですが、なぜかANSI版のNM_HTMLVIEWAを使って通知されます。それはそれでかまわないのですが、HTML自体がUTF-16で書かれている場合*2にはNM_HTMLVIEWWで通知されます。
ドキュメントを見ると、DTM_ADDTEXTしたときにはNM_HTMLVIEWAで、DTM_ADDTEXTWしたときにはNM_HTMLVIEWWで通知されるようなのですが、DTM_NAVIGATEした場合については何も書かれていません。通知メッセージが来たときにどちらなのか判定しないといけないのですがどうやって判定したものか…
さらにNM_HOTSPOTを処理したとしても、スクリプトなどで別のURLに飛ばされた場合にはどうしようもないという問題もあります。