2009-07-15 9 views
1

WindowsエクスプローラがローカルディスクをブラウズしているときにDISPID_BEFORENAVIGATE2イベントを傍受するBHOがあります。 XPとVistaではうまく動作しますが、Windows 7 RCでは動作しなくなりました。Windows 7はDISPID_BEFORENAVIGATE2イベントを起動しませんか?

Windows 7 RCは、ローカルフォルダを閲覧するときにDISPID_BEFORENAVIGATE2イベントの送信を停止しました。私のBHO(DISPID_DOWNLOADBEGINなど)に他のイベントを送りますが、DISPID_BEFORENAVIGATE2が必要です。

誰でもこれを確認したり、回避策を提示できますか?

ありがとうございます!

+0

DWebBrowserEventsインターフェイスがシェルによってもう呼び出されないように見えるのは間違いなく(IEがシェルから完全に引き出されているので意味が分かります)残念ながら、私は交換が何であるか分からない。 – EricLaw

+0

Eric、あなたのコメントをありがとう、Win7のソースを調べることができる人から聞くことができてうれしいです:-)しかし、DWebBrowserEventsインターフェイスの他のイベントはWin7によって発生するようです。 IEHelperサンプルのソースを再コンパイルしました(MSDNで見つけました)、DISPID_DOWNLOADBEGIN、DISPID_PROGRESSCHANGEなどの他のイベントが表示されます。すべての通常のイベントはDISPID_BEFORENAVIGATE2を除いて表示されます。それは私のバグのように見えます。 –

+0

OK、Windows 7 RTMが最終的に届きました。バグはまだあります:DISPID_NAVIGATECOMPLETE2などは記録されますが、DISPID_BEFORENAVIGATE2はありません。マイクロソフト、なぜ私にこれをやっていますか? :-) –

答えて

0

これは1年以上経過していますが、回避策があります:MinHookなどのAPIフックライブラリを使用してIShellBrowser::BrowseObjectにAPIフックを設定するだけです。 API Hook on a COM object function?

これは、すべてIShellBrowserのインスタンスを迂回経路にルーティングします。しかし、IShellBrowserIOleWindowに拡張されているので、IOleWindow::GetWindowSendMessageを使用して、サブクラス化したウィンドウを持つ個々のIShellBrowserインスタンスを処理できます。

関連する問題