今までは、昔書いたように、コントロールコンテナサイトにIServiceProviderを実装してQueryServiceでIInternetProtocolを返すようにしていました。しかし、XP SP2から細かな動作が変わったようで、httpのURLを渡してIWebBrowser2::Navigate2を呼び出すとプロセスが死んでしまいます。動作としては、例えばhttp://snak.tdiary.net/にアクセスしようとすると、
これを繰り返してスタックオーバーフローで死んでしまいます。
そこでPluggable Namespace Handlersの仕組みを使うように変更しました。手順としてはこんな感じです。
IInternetSession::RegisterNameSpaceに渡すCLSIDはいつ使われるのか*1とか、パターンにはどんなものが指定できるのかとかがドキュメントに書いてなくて良くわかりませんが、プロトコルを丸ごとハンドリングする場合にはパターンにはnullを渡しておけば問題ないようです。
*1 coclassのCLSIDを渡せば良いのだと思いますが、クラスファクトリを渡しているので使いどころがないし、レジストリに登録したりしなくて問題ありません。登録しておくとスレッドモデルの取得とかに使われるのかも
新たにメールを書くときに適当なメールに返信してしまうために無関係なIn-Reply-ToやReferencesが付いてしまうという問題は昔からありますが、メーラ側でうまく防ぐ(勝手にヘッダを取ってしまう)ことはできるでしょうか。
簡単に思いつくのは、
あたりですが、これはこれで付いて欲しいときに付かなくて困ることになりそうです。
メッセージ作成時のUI上で返信であることをもっと主張してみるという手もありますが、そもそもメッセージ中に返信であるという情報が残るとは思ってもいない人に効果があるかと言われると疑問です。
そもそも新規作成の時にメールアドレスを入力するのが面倒なために返信ボタンを押してしまうということを考えると、既存のメールアドレスに対して簡単に新規メールを送るためのUIが充実していれば返信を使わなくなるのかもしれません。