调用 IContextMenu 时如何处理重命名操作?
How do you handle rename operations when calling 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} 我可以在注册表中看到这是 IDefViewFrame3
的 IID 但是它似乎没有证件!另一方面,IDefViewFrame 已记录在案,但 MSDN 唯一说的是 "Used only for its IUnknown functionality. It has no methods of its own."。
在这种情况下,是否有记录的方法来处理 XP 上的重命名操作?
我真的不想伪造 IDefViewFrame3 界面,但我能想到的唯一其他选择是查看它是否是重命名动词,然后在 TrackPopupMenu
之后自己处理它。
IDefViewFrame3 在 Windows XP 上的 IUnknown 之后看起来像这样:
STDMETHOD(GetWindowLV)(THIS_ HWND*phwnd) PURE;
STDMETHOD(ShowHideListView)(THIS) PURE;
STDMETHOD(OnResizeListView)(THIS) PURE;
STDMETHOD(ReleaseWindowLV)(THIS) PURE;
STDMETHOD(DoRename)(THIS) PURE;
和 DoRename
由 InvokeCommand
内的 DefView 调用,但由于它是如此晦涩且没有记录,因此所有第 3 方命名空间扩展都不太可能正确处理它,因此即使您实现了 IDefViewFrame3,您仍然如果 InvokeCommand
失败,必须检查重命名动词。
我正在用 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} 我可以在注册表中看到这是 IDefViewFrame3
的 IID 但是它似乎没有证件!另一方面,IDefViewFrame 已记录在案,但 MSDN 唯一说的是 "Used only for its IUnknown functionality. It has no methods of its own."。
在这种情况下,是否有记录的方法来处理 XP 上的重命名操作?
我真的不想伪造 IDefViewFrame3 界面,但我能想到的唯一其他选择是查看它是否是重命名动词,然后在 TrackPopupMenu
之后自己处理它。
IDefViewFrame3 在 Windows XP 上的 IUnknown 之后看起来像这样:
STDMETHOD(GetWindowLV)(THIS_ HWND*phwnd) PURE;
STDMETHOD(ShowHideListView)(THIS) PURE;
STDMETHOD(OnResizeListView)(THIS) PURE;
STDMETHOD(ReleaseWindowLV)(THIS) PURE;
STDMETHOD(DoRename)(THIS) PURE;
和 DoRename
由 InvokeCommand
内的 DefView 调用,但由于它是如此晦涩且没有记录,因此所有第 3 方命名空间扩展都不太可能正确处理它,因此即使您实现了 IDefViewFrame3,您仍然如果 InvokeCommand
失败,必须检查重命名动词。