【右键菜单】Windows端一款高度自定义及美化的右键/上下文菜单管理工具

1. 简介

  • 软件名称:Nilesoft Shell
  • 作者:moudey
  • 开源&付费情况:闭源 → 已开源、免费
  • 应用平台:Windows 7/8/10/11 (x86/x64/arm64)
  • 包管理工具安装:
    • scoop install nilesoft-shell
    • winget install nilesoft.shell
    • choco install nilesoft-shell

Nilesoft Shell 是一款可高度自定义菜单项及美化的右键菜单工具
在同类右键菜单软件中最大的特点是 不动注册表 ,配置文件在根目录下,可轻便的安装和卸载

2. 相关链接

3. 功能/特点

  • 轻量便携、资源占用低、干净无捆绑
  • 不修改注册表
  • 菜单项及嵌套层级完全自定义
  • 背景、图标可高度自定义
  • 卸载后立即还原右键菜单,保留配置文件再次安装也能还原
  • 上手难度低,对有编程基础的用户更友好
  • 内置各种变量、函数、语法,详见 Shell Docs(Shell)
  • 支持任务栏右键菜单
  • 多列菜单

4. 缺点/不足

  • 点击 exelnk 文件似乎有一丢丢延迟?感知不明显,可能与电脑性能或软件配置有关
  • 暂不支持打开对话框和保存对话框

5. Windows 10 下截图

image_30

6. 使用

  • 启用:运行 shell. exe 后,点击 RegisterCtrl + R 后,退出即可
  • 卸载:点击 UnregisterCtrl + U
  • 更新配置:修改保存好配置文件 shell.nss 后,点击 Restart ExplorerCtrl + X
  • 执行以上操作都会重启资源管理器,等待一下就好
4 Likes

最近在论坛里看到相关帖子,想起用了几个月的 “Nilesoft Shell” 也能实现

【Mini Env】一个在 Windows 系统中通过右键菜单添加目录到环境变量的小工具 - 发现频道 :mag_right: - 小众软件官方论坛

来自Discord上FierySpectre所分享的代码片段:

item(title = 'Add to PATH' Window=Hidden type='dir|back.dir' admin cmd args='/K @echo powershell.exe [Environment]::SetEnvironmentVariable("\"PATH\"", "\"@sel.path;"\" + [Environment]::GetEnvironmentVariable("\"PATH"\", "\"Machine"\"),"\"Machine"\") && @echo exit')

以及 @nanachi 的求助帖,有办法给7z的右键菜单增加按键导航吗 - 问题求助:question: - 小众软件官方论坛

给菜单项添加快捷键,title=‘菜单项文本(&按键)’:

item(find="search everything" title='搜索(&S)')

mini-env是个练手项目,完成度不高。

这工具看着不错。

根目录下 .\imports 文件夹是引用的配置文件 xx.nss

配置文件shell.nss的简单介绍:

shell
{
	// 变量声明
	var
	{
		isw11=sys.is11	
	}
	// 基本设置
	set
	{
		// 主题外观
		theme
		{
			// 整体样式:auto, classic, white, black, or modern
			name="modern" 

			// 夜间模式: true, false
			dark = true

			// 直角,默认是圆角
			// border.radius = 0


			// 背景样式
			background
			{
				// 背景透明度
				// opacity = 85
				// 背景效果: value 0 = disable, 1 = transparent, 2 = blur, 3 = acrylic
				// effect = 1
			}
		}

		// 菜单显示延迟调整:0-4000
		showdelay = 0
	}

	// 引入其他的配置文件
	images import 'imports/images.nss'

	// 静态菜单项:配置现有菜单项,比如系统内置或通过其他软件/注册表添加的
	static
	{	
		
	}

	// 动态菜单项:通过dynamic的配置,自定义添加的菜单项
	dynamic
	{
	
	}
}
1 Like

感谢推荐。我后来用十六进制编辑器暴力修改字符,算是达成了需求。这个看起来也不错,可以收作备用

很强大,就是写配置有点麻烦

介绍一些基本用法,方便懒得去看文档的轻度用户 :joy:,也欢迎大家分享代码段:

  • 隐藏现有菜单项
static
{
  // 通过Nilesoft Shell能方便的隐藏一些第三方右键菜单软件不方便隐藏的系统项和注册表添加项

  // find:菜单项的文本或是自定义title的值,每项用"|"分隔
  // 字符匹配的默认方式是填入的文本项只需要被现有文本包含就行
  // 比如:填入find="百度网盘",就能匹配到"上传到百度网盘"及其他含有"百度网盘"的项
  item(find="授予访问权限|上传到百度网盘|" vis=hidden )
}
  • 菜单项重命名和快捷键
static
{
    item(find="open in new ta" title='在新标签打开')
    item(find="使用火绒安全粉碎文件" title='火绒处理文件')
    item(find="search everything" title='搜索(&S)')
    item(find="智能解压并删除" title="智能解压并删除(&X)")
    item(find="记事本" title="记事本(&N)")
}
  • 自定义菜单项图标
static
{
	// image=\图标编码
    // 内置的图标编码:[Glyphs Gallery - Shell](https://nilesoft.org/gallery/glyphs)
    // 也可以去阿里图标找:[iconfont-阿里巴巴矢量图标库](https://www.iconfont.cn/)
	item(find="打开" image=\uE215)
	item(find="打开方式" image=\uE16A)
	item(find="注销" image=\uE045)
	item(find="编辑" image=\uE281)
	item(find="在新标签打开" image=\uE0A4)
	item(find="选择其他应用" image=\uE1F6)
	item(find="Run script" title='运行' image="\uE20C")
}
  • 添加菜单项
dynamic
{
    // Windows Terminal在当前目录打开
    // title:菜单项文本(&快捷键)
   //  admin=key.shift():按住shift右键以管理员方式打开
    item(where=sys.ver.major >= 10 title=title.Windows_Terminal tip=tip_run_admin admin=key.shift() image=icon.run_with_powershell cmd='wt.exe的路径' arg='-d "@sel.path\."')
}
  • 指定文件的打开方式
dynamic
{
// .nss用VS Code打开
// item(type='file' find='.nss'  title='VS Code'cmd='VS Code路径' args='"@sel.path"')

// .nss用记事本打开
item(type='file' find='.nss'  title='记事本'cmd='记事本路径' args='"@sel.path"')
}
3 Likes

现在新版本的shell.nss好像不一样了,可以更新下介绍吗 ::

settings
{
	priority=1
	exclude.where = !process.is_explorer
	showdelay = 200
	// Options to allow modification of system items
	modify.remove.duplicate=1
	tip.enabled=true
}

import 'imports/theme.nss'
import 'imports/images.nss'

import 'imports/modify.nss'

menu(mode="multiple" title="Pin/Unpin" image=icon.pin)
{
}

menu(mode="multiple" title=title.more_options image=icon.more_options)
{
}

import 'imports/terminal.nss'
import 'imports/file-manage.nss'
import 'imports/develop.nss'
import 'imports/goto.nss'
import 'imports/taskbar.nss'

v1.9.15 版本

changes
改进配置文件结构,删除了 variablesstaticdynamic 部分

相当于将 static 部分写到 ~\Nilesoft Shell\imports\modify.nss

dynamic 部分写到 ~\Nilesoft Shell\imports\new.nss


~\Nilesoft Shell\shell.nss

// settings 文档:https://nilesoft.org/docs/configuration/settings

settings
{
  // 显示菜单延迟(ms)
  showdelay = 0
	
  // 阻止窗口或程序的起作用
  exclude
  {
    // 作用在资源管理器
    where = !process.is_explorer
    // 窗口名
    // window = window name
    // 进程名
    // process = process name
  }

  // 提示
  tip = true

  // 修改菜单项
  modify
  {
    // 布尔值:0 = 禁用、1 = 启用

    // 启用
    enabled = 1

    // 图标 [0 = 禁用, 1 = 启用, 2 = 自动]
    image = 2

    // 修改标题
    title = 1

    // 显示或隐藏
    visibility = 1

    // 修改父级
    parent = 1

    // 修改位置
    position = 1

    // 分隔线
    separator = 1

    // 自动设置图标和组
    auto = 1
  }

  // 新的菜单项处理
  new
  {
    // 开启
    enabled = 1
    // 图标
    image = 1
  }
}

// 引入主题配置
import 'imports/theme.nss'

// 引入图标
import 'imports/images.nss'

// 引入修改现有菜单项
import 'imports/modify.nss'

// 引入新增菜单项
import 'imports/new.nss'

~\Nilesoft Shell\imports\modify.nss

// Modify 文档:https://nilesoft.org/docs/configuration/modify-items
// 属性(mode、where、type等)文档:https://nilesoft.org/docs/configuration/properties
// 函数(id()等)文档:https://nilesoft.org/docs/functions

// 含用于修改现有的上下文菜单项,这些项由系统或第三方程序添加


// 通过标识符删除菜单项 by identifiers
modify(mode=mode.multiple
	where=this.id(id.restore_previous_versions,id.cast_to_device)
	vis=vis.remove)

modify(type="recyclebin" where=window.is_desktop and this.id==id.empty_recycle_bin pos=1 sep)

modify(find="unpin*" pos="bottom" menu="Pin/Unpin")
modify(find="pin*" pos="top" menu="Pin/Unpin")

modify(where=this.id==id.copy_as_path menu="file manage")
modify(type="dir.back|drive.back" where=this.id==id.customize_this_folder pos=1 sep="top" menu="file manage")

modify(where=str.equals(this.name, ["open in terminal", "open linux shell here"]) || this.id==id.open_powershell_window_here
	pos="bottom" menu="Terminal")

modify(mode=mode.multiple
	where=this.id(
		id.send_to,
		id.share,
		id.create_shortcut,
		id.set_as_desktop_background,
		id.rotate_left,
		id.rotate_right,
		id.map_network_drive,
		id.disconnect_network_drive,
		id.format,
		id.eject,
		id.give_access_to,
		id.include_in_library,
		id.print
	)
	pos=1 menu=title.more_options)

// 隐藏菜单项:以“火绒杀毒”、“通过QQ发送到”为例
modify(find="使用火绒安全进行杀毒|通过QQ发送到" vis=Hidden)

// 重命名和按键定位,以“记事本”为例,设置为 N 键
modify(find="记事本" title="记事本(&N)")

~\Nilesoft Shell\imports\new.nss

// new items 文档:https://nilesoft.org/docs/configuration/new-items

menu(mode="multiple" title="Pin/Unpin" image=icon.pin) { }
menu(mode="multiple" title=title.more_options image=icon.more_options) { }


// 新建 Windows Terminal 菜单项
item(where=sys.ver.major >= 10 title=title.Windows_Terminal tip=tip_run_admin admin=key.shift() image=icon.run_with_powershell cmd='D:\D-software\terminal-1.17.11461.0\wt.exe' arg='-d "@sel.path\."')


import 'terminal.nss'
import 'file-manage.nss'
import 'develop.nss'
import 'goto.nss'
import 'taskbar.nss'

另外 dc 上也有用户分享主题和配置,有需要也可以看看

2 Likes

可以为右键菜单配快捷键吗?

另外这两级菜单会有重叠,不知道可不可以配置下
image

指的是为某个菜单项比如刷新设置组合键吗,比如直接按下Ctrl + R触发刷新
如果是这样的话,可能需要借助其他工具比如 ahk 来做到

没理解,如果是指修改二级菜单弹出的水平偏移值可以通过修改
theme.nss

theme
{
  layout
  {
    //  水平向右偏移 10 ,范围:-20(左) ~ 20(右)
    popup = 10
  }
}

image
没错,我指的就是二级菜单的水平偏移,现在两个菜单没有重叠了,看上去舒服多了
另外我指的快捷键是指括号里这个,比方我想给“新建”二级菜单里的这个“microsoft excel工作表”安排一个像“文件夹(F)”这样的快捷键,应该怎么操作?
image

@Asipirin

之前举过例子

// 重命名和按键定位,以“记事本”为例,设置为 N 键
modify(find="记事本" title="记事本(&N)")

试试:

// find:匹配菜单项名,title:设置菜单项名(&定位按键)
modify(find="Microsoft Excel" title='MS Excel(&E)')

很奇怪,我在一级菜单里试了,没问题,到了二级菜单就不行了

是语法的问题吗?我看到你的语法有的地方用的是双引号,有的地方是单引号

modify(find="记事本" title="记事本(&N)"

modify(find="Microsoft Excel" title='MS Excel(&E)'

应该无法直接修改二级菜单

试试这两种方法

方法一

修改注册表

ContextMenuManager 软件中看了下也没找到能直接编辑二级菜单的办法

  1. 注册表中导航到 HKEY_CLASSES_ROOT\Local Settings\MuiCache\530\AAF68885
  2. 找到 @C:\Program Files (x86)\Microsoft Office\Root\VFS\ProgramFilesCommonX64\Microsoft Shared\Office16\oregres.dll,-101 双击打开
  3. 数值数据中追加 &(E)

image

如果找不到就直接在注册表中搜Microsoft Excel 工作表来定位

如果需要创建或删除新建菜单项中的项,可以参考:

方法二

不动注册表,通过 Nilesoft Shell,先隐藏系统内置的新建菜单项,再创建一个完全自定义的菜单项

\imports\modify.nss

// 移除新建菜单项
remove(type='back' find="新建")

shell.nss

// 引入新建菜单
import 'imports/create.nss'

创建 \imports\create.nss 文件

// 创建“新建”菜单 
menu(type='back'  Mode='multiple' title='新建(&W)' image=\uE160)
{
	item(title='新建文件夹' cmd=io.dir.create(sys.datetime('y-m-d')))

    // 创建文件,true:创建时进入重命名状态
    item(title='MS Excel(&E)' cmd=io.file.create('Excel.xlsx', null, true))
}

不是,具体语法看文档:Properties Find - Shell

通过修改注册表的方式解决了,感谢大佬

可以试一试ContextMenuManager这个软件,是修改右键菜单的,选项挺多的,应该能满足你的需求

1 Like

修改注册表的方法第一时间想到的是 ContextMenuManager ,之前是在左侧的“目录背景”选项卡中没找到,看到你的回复又找了下,在“主页”左下角的“新建菜单”就有,谢谢提醒

要是有人能给写一个界面来配置,这软件是真好使,代码实在不太友好,也没中文文档 :smiling_face_with_tear: 前段时间用了一下 又卸载了

是的,自定义有一定的门槛,实现复杂点的功能还需要另写脚本,最初只是因为美化需求找的,看了文档后发现自定程度比 ContextMenuManager 高,不过二者原理不一样并不冲突,我都用

软件嘛,没有最好的只有最适合的:joy:


值得庆幸的是软件 已开源

但刚刚访问官网发现浏览器报危险网站,暂时别访问,不知道啥情况,之前也偶尔崩过可能是被攻击了 :thinking:

https://h1.appinn.net/file/9eb7982bf62c93b7e82e1.png