在调用IContextMenu时如何处理重命名操作?

我使用CMF_CANRENAME调用IContextMenu::QueryContextMenu ,在调用Windows XP上的IContextMenu::InvokeCommand时遇到了处理重命名操作的问题。

我不是一个命名空间的扩展,我不使用DefView / IShellView,但我提供了一个实现IServiceProvider的网站。

在较新版本的Windows上,我查询了一个实现了IFolderView2的服务,并且shell调用了IFolderView2::DoRename ,我可以开始重命名操作。

在Windows XP上,但它查询SID_DefView服务,但我找不到有关如何实现该服务的任何信息。

它(SHELL32!CDefFolderMenu :: _ ProcessRename)要求的接口是{985F64F0-D410-4E02-BE22-DA07F2B5C5E1},我可以在registry中看到这是IDefViewFrame3的IID,但它似乎是无证的! 另一方面IDefViewFrame被logging,但是MSDN所说的唯一的事情是“仅用于它的IUnknownfunction,它没有自己的方法”。

在这种情况下是否有文档处理XP的重命名操作?

我真的不想伪造一个IDefViewFrame3接口,但我能想到的唯一的其他select是看它是否是重命名的动词,只是在TrackPopupMenu后自己处理。

在Windows XP的IUnknown之后,IDefViewFrame3看起来像这样:

 STDMETHOD(GetWindowLV)(THIS_ HWND*phwnd) PURE; STDMETHOD(ShowHideListView)(THIS) PURE; STDMETHOD(OnResizeListView)(THIS) PURE; STDMETHOD(ReleaseWindowLV)(THIS) PURE; STDMETHOD(DoRename)(THIS) PURE; 

DoRename是由InvokeCommand内部的InvokeCommand调用的,但是由于它是如此晦涩难懂,所以即使你实现了IDefViewFrame3,如果InvokeCommand失败,你仍然需要检查重命名动作,所以所有第三方名称空间扩展都不可能正确地处理它。