タブファイラー開発ブログ

Tablacus ExplorerやX-Finderの作者のブログ

IContextMenuにIShellBrowserを関連付ける

カスペルスキー対策でコンテキストメニューを調べている時にEternalWindowsを読んでいたら、IContextMenuにIShellBrowserを関連付ける方法が載ってました。 今までのTablacus Explorerでは右クリックから「名前の変更」が選ばれた場合は、Tablacus Explorer側で名前の変更を呼び出すようにしていたのですが、IContextMenuにIShellBrowserを関連付ければ自動的に名前の変更が行われるようになりました。 フォルダなどの新規作成も◎ 参考にしたのは EternalWindows / シェル拡張 / UIオブジェクトの実装 IObjectWithSite::SetSiteということなのでTablacus Explorerでは、IContextMenuにIUnknown_SetSiteでIShellBrowserに関連したIServiceProviderを渡しています。 IServiceProviderのQueryServiceが呼ばれた際は、IShellViewのQueryInterfaceで取得した値を渡せばOKでした。 Tablacus ExplorerではIServiceProviderをIExplorerBrowserのフィルターでも使っているのですが、こちらはIShellViewのQueryInterfaceで取得した値を渡すとIExplorerBrowserの動作にいろいろと不具合が出るので、IExplorerBrowserにIUnknown_SetSiteで渡すIServiceProviderはIShellViewのQueryInterfaceの値を渡さないようにしています。 詳しくはTablacus Exploerのソースをご覧ください。 上記の「名前の変更」の場合にはWindows 7ではIID_IFolderView2がWindows XPではIID_IDefViewFrame3でQueryServiceが呼ばれました。IID_IDefViewFrame3って何だ? それから、カスペルスキーの方ですが、テクニカルサポートにKaspersky Internet Security 2014のシステム上の問題のシステム遅延という事で問い合わせたら、詳細を確認してくれると解答を頂いています。