You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检索/遍历Windows 11的IExplorerCommand上下文菜单项?

问题:如何在Windows 11中获取新式精简上下文菜单的IExplorerCommand对象(含Dropbox云命令)

大约五年前,我为客户开发了一款程序,可在程序内重现Windows资源管理器的上下文菜单——点击代表数据文件的对象时,会显示与资源管理器中一致的上下文菜单,包括Dropbox共享菜单项。实现逻辑是从注册表中查找所有IContextMenu COM对象,逐个查询以添加菜单项。

一直以来该程序运行正常,但Windows 11带来了变化,新版Dropbox客户端(v159)打破了向后兼容性。

旧式IContextMenu COM对象可在HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers(或类似位置)查询,但Windows 11的新式精简上下文菜单改用IExplorerCommand对象。资源管理器会在旧式上下文菜单及IContextMenu迭代中包含这些对象——Dropbox曾因此出现菜单项重复的bug,他们在v159版本中通过禁用IContextMenu项修复了该问题,这导致我的程序中不再显示这些菜单项。

那么,我该如何查找并遍历添加到新式精简上下文菜单中的所有IExplorerCommand对象?包括Dropbox这类应用的云提供商命令?

我可在Dropbox的AppxManifest.xml中找到其菜单项的类ID:

<Extensions>
    <desktop3:Extension Category="windows.cloudFiles">
        <desktop3:CloudFiles>
            <desktop3:CloudFilesContextMenus>
              <desktop3:Verb Id="Dropbox01UpgradeCommand"
                             Clsid="F3BC3DAF-431B-4F0E-B105-E9BB76335840" />
              <desktop3:Verb Id="Dropbox02ShareCommand"
                             Clsid="7F4C5B83-2680-40AF-9AE9-2161AA759EF2" />

它还定义了这些对象运行的COM服务器:

<com:Extension Category="windows.comServer">
    <com:ComServer>
        <com:SurrogateServer AppId="67233DFC-D70F-4D8E-A068-6877D86826BC"
                             DisplayName="ms-resource:ShellExtensionServerDisplayName">
            <com:Class Id="7F4C5B83-2680-40AF-9AE9-2161AA759EF2"
                       Path="DropboxExt64.55.0.dll" ThreadingModel="STA" />
            <com:Class Id="F3BC3DAF-431B-4F0E-B105-E9BB76335840"
                       Path="DropboxExt64.55.0.dll" ThreadingModel="STA" />

这些条目也可见于HKEY_CLASSES_ROOT\PackagedCom,例如:

[HKEY_CLASSES_ROOT\PackagedCom\Package\DropboxInc.Dropbox_159.4.5870.0_x86__wkt425jdc3sga\Server\0]
[HKEY_CLASSES_ROOT\PackagedCom\Package\DropboxInc.Dropbox_159.4.5870.0_x86__wkt425jdc3sga\Class{7F4C5B83-2680-40AF-9AE9-2161AA759EF2}]
[HKEY_CLASSES_ROOT\PackagedCom\Package\DropboxInc.Dropbox_159.4.5870.0_x86__wkt425jdc3sga\Class{F3BC3DAF-431B-4F0E-B105-E9BB76335840}]

但我甚至无法为这些类ID创建IUnknown实例——即使在Windows资源管理器内的外壳扩展中也不行,更不用说我的应用程序了。我得到HRESULT错误0x80040154 (-2147221164)。

核心疑问:

  • 如何定位这些IExplorerCommand项?(注意:若使用ICatInformation::EnumClassesOfCategories(),Dropbox项未定义类别信息)
  • 如果无法构建完整列表,至少有没有办法访问Dropbox这类已知对象?

内容的提问来源于stack exchange,提问作者user1371844

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:11:51