如何将 Windows 10 右键单击上下文菜单的新子菜单中的项目移动到分隔线上方?
注册表中有什么需要设置的吗?
答案1
在文件类型的键Config
下创建一个子键。然后在该子键内,添加一个名为的字符串值。更改应立即生效:ShellNew
BeforeSeparator
为了弄清楚这一点,我不得不深入研究 Explorer 代码。shell32.dll
包含一个CNewMenu
表示“新建”菜单的类,并有一个名为的函数_BeforeSeparator
,该函数确定给定的条目是否应放在分隔符之前。以下是该函数反汇编的重要部分(由投资发展协会):
首先它使用PathMatchSpecW
查看键名是否为 、 或 之一.lnk
。.library-ms
如果Folder
是(红色/左路径),则该项目保证会出现在线上方。如果不是(绿色/右路径),该函数将检查数据结构中10h
某个部分(+8
)中的某个位( )是否已设置。
我需要找到负责设置该位的代码。有一个函数_GetNewObjectInfoForKey
似乎负责设置相关的数据结构。以下是它的部分反汇编代码,几乎就在开头:
它尝试打开一个名为的子项Config
,如果成功(红色路径),则使用该_GetConfigFlags
函数设置包含我们感兴趣的位的数据结构部分!_GetConfigFlags
继续测试各种条目的存在,并在适当的情况下设置各种位。以下是设置目标位的部分(10h
):
我们在那里看到所需的条目名称:BeforeSeparator
。
答案2
如果有人需要注册表文件来添加带有日期的新文件夹,这里是
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\.NewDirectoryBasedOnDate]
@="NewDirectoryBasedOnDate"
[HKEY_CURRENT_USER\Software\Classes\.NewDirectoryBasedOnDate\ShellNew]
"Command"="\"CMD\" /D /E:ON /c for /F \"tokens=1-9 delims=.,\\:/\" %%A IN (\"%%date%%\") DO for /F \"tokens=*\" %%a IN (\"%1\") do md \"%%~dpa\\%%A.%%B.%%C\""
"nullfile"=hex:
[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate]
"FriendlyTypeName"="New Folder With Date"
[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate\DefaultIcon]
@="shell32.dll,3"
[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate\Shell\open]
"LegacyDisable"=hex:
[HKEY_CURRENT_USER\Software\Classes\NewDirectoryBasedOnDate\Shell\open\command]
@="."
[HKEY_CURRENT_USER\Software\Classes\.NewDirectoryBasedOnDate\ShellNew\Config]
"BeforeSeparator"=""
将其保存为 folderwithdate.reg 并运行它。