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

在Windows资源管理器上下文菜单中排序,windows,contextmenu,Windows,Contextmenu,如何更改上下文菜单中条目的顺序?(例如,对于目录),我需要知道Windows在显示时如何确定顺序,以便控制它。例如,我想将自定义操作放在关联菜单列表的末尾 提前感谢 我的Google fu让我想到: 因此,排序基于决策顺序中的以下元素: 密钥优先级(例如,txtfile,*,AFSO) shellex\ContextMenuHandler的注册表枚举顺序,静态动词的特殊情况始终位于第一位 IContextMenu实现顺序 因此,如果对位置存在任何争用,那么扩展就没有一致的方式来保证它们在菜单中的

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

提前感谢

我的Google fu让我想到:

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

  • 密钥优先级(例如,txtfile,*,AFSO)
  • shellex\ContextMenuHandler的注册表枚举顺序,静态动词的特殊情况始终位于第一位
  • IContextMenu实现顺序
  • 因此,如果对位置存在任何争用,那么扩展就没有一致的方式来保证它们在菜单中的相对位置


    显然,你不能对第一阶段做任何事情。阶段3仅适用于处理程序中实现的谓词。剩下的是第二阶段。你唯一能做的就是在ContextMenuHandlers下命名你的条目,这样它将首先被枚举,但没有什么能阻止其他人做同样的事情。

    展示了一种在上下文菜单中创建(而不是移动)项的简单方法。我设法复制了一个现有项目。然后,我将我的项目移动到上下文菜单中更高、更容易访问的位置,方法是重命名键,以“aMyItem”或“0MyItem”开头。

    这为我做到了。。。步骤4至7-设置“标志”

    这是针对Windows 7的,对于较新版本可能也一样。它受到了其他答案的启发,一切都影响着秩序

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

    我对注册表中的任何更改概不负责

    上下文菜单中有三个部分,如(from)中所述

    他们称之为:

    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).
    
    在这些部分中,位置由
    中的规则决定 更改“部分”内顺序的最简单方法是更改
    HKCR-*-shell
    HKCR-*-shellex
    下的注册表项名称。子键
    shell
    下的所有内容将位于它们前面的
    shellex
    下。具有
    CLSID
    作为键名的键将作为最后一个条目,因为它们是使用顺序中的最后一个

    举个例子,我遵循了一个
    编辑2021-04-14: MSDN链接不再有效,它将重定向到“浏览代码示例”页面。您可以在那里搜索
    上下文菜单示例
    ,但我后面的示例似乎已被删除。
    最接近我跟踪的那个旧的

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

    还有一些方法可以改变顺序

    对于
    shell
    下的键,可以使用字符串数据
    Top
    Bottom
    添加值
    Position
    。无法决定在哪个“部分”

    对于
    shellex
    下的键,值
    Position
    无效。相反,可以使用上面的
    标志来决定条目在哪个“部分”

  • 对要移动的shellext使用
    CLSID
    。就像
    {XXXXXXXX-XXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
    。从键名或默认值获取它,这取决于输入的方式
  • 在HKCR-CLSID下查找条目,该项的名称为
    CLSID
  • 在找到的
    CLSID
    下,添加一个名为
    flags
    的值和数据为
    DWORD
    的值,并添加上面描述的“节”号

  • 我为这个双关语感到抱歉。我认为第二个链接()会帮助你。微软总是在捣乱他们的系统。这是存档版本:MSDN链接已经消失。谢谢@user30478,我已经更新了答案。但我找不到我遵循的老例子。