在Windows资源管理器上下文菜单中排序

ixS*_*Sci 6 windows contextmenu

如何更改上下文菜单中条目的顺序?(例如,对于目录)我需要知道Windows在显示时如何确定顺序,以便我可以控制它.例如,我想将自定义操作放在上下文菜单列表的末尾

预先感谢!

Luk*_*uke 8

我的Google-fu让我这样:

因此,排序基于决策顺序中的以下元素:

  1. 关键优先级(例如,txtfile,*,AFSO)
  2. shellex\contextmenuhandlers的注册表枚举顺序,静态动词的特殊情况始终是第一个
  3. IContextMenu实现顺序

因此,如果存在任何争用位置,则扩展没有一致的方式来保证它们在菜单中的相对位置.

显然,您无法对阶段1执行任何操作.阶段3仅适用于处理程序中实现的谓词.离开阶段2.你唯一能做的就是在ContextMenuHandlers下命名你的条目,这样它就会先被枚举,但没有什么能阻止别人做同样的事情.

  • 微软总是在搞乱他们的系统。这是存档版本:https://docs.microsoft.com/en-us/archive/blogs/freeassociations/how-do-explorer-context-menus-sort-verbs (2认同)

244*_*4an 6

这适用于 Windows 7,对于较新版本可能相同。它受到其他答案的启发,都在影响订单。

我正在解释“*”(所有文件)的条目,但特殊扩展名也是如此。

我对注册表中的任何更改不承担任何责任!

上下文菜单中有三个部分,如如何更改上下文菜单中的选项顺序中所述(来自@Anonymouse 的回答

他们称他们为:

2 - Default menu position (at the top).
1 - Send to, copy to folder and move to folder menu part (in the middle).
0 - Rename menu part (at the bottom).
Run Code Online (Sandbox Code Playgroud)

在这些部分中,位置由@Luke 回答的规则决定。
更改“部分”中顺序的最简单方法是更改HKCR-*-shell或下的注册表项名称HKCR-*-shellex。所有在 subkey 下的shell都将在它们之前shellex。具有CLSID作为键名的键将作为最后一个条目,因为它们在使用顺序中排在最后。

例如,我正在按照MSDN 中示例构建上下文菜单处理程序
EDIT 2021-04-14: MSDN 链接不再有效,它重定向到“浏览代码示例”页面。您可以在那里搜索Context menu sample,但我关注的那个似乎已被删除。
最接近我跟随的旧的也许是这个

我遵循的方法是将CLSID用作 下键的名称shellex,并使用“友好名称”作为默认值。它被放置在“部分”2(顶部部分)的底部。我将密钥名称更改为类似的名称Asample并将默认值更改为CLSID。现在它直接在shell.

还有其他一些更改顺序的方法。

对于下面的键,shell您可以Position使用字符串数据TopBottom. 无法决定在哪个“部分”。

对于shellex值下的键Position没有影响。相反,可以决定条目将在哪个“部分”中使用flags上面的链接所述。

  1. CLSID对要移动的 shellext使用。就像
    {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}. 从键名或默认值获取它,这取决于条目是如何完成的。
  2. 找到 HKCR-CLSID 下的条目,键的名称为CLSID.
  3. 添加具有名称的值flags和数据DWORD与找到的下上述“部分”号码CLSID