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のシステム上の問題のシステム遅延という事で問い合わせたら、詳細を確認してくれると解答を頂いています。