Win11

Win11 右键菜单与窗口管理

日常使用 Win11,右键菜单和窗口控制是高频操作入口。系统自带的菜单和窗口功能满足基础需求,而借助第三方工具可以进一步优化操作体验。1

下面介绍四款实用工具,覆盖菜单样式切换、菜单自定义扩展、菜单项编辑与窗口增强管理。

菜单管理

菜单美化

Win 11 默认使用 新版右键菜单(圆角、图标、默认折叠),许多常用功能被收进 显示更多选项

右键菜单
右键菜单

如果习惯一展开即显示所有选项的 经典菜单,可以使用初雨团队开发的系统维护工具 Dism++。解压后以管理员身份运行 Dism++x64.exe,点击 系统优化 > Explorer,开启 禁用Win11 加入的新右键菜单,默认显示更多选项,并重启资源管理器。

Dism++
Dism++

如果既想保留 Win11 的新版菜单,又想给右键菜单增添更多功能,可以使用 Nilesoft 开发的右键增强工具 Shell。解压后以管理员身份运行 shell.exe,点击 Register 按钮,并重启资源管理器。

Shell
Shell

通过 Shift + 鼠标右键 在任务栏点击 Shell > Directory 可修改配置和汉化,其目录结构如下:

Plaintext
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
Nilesoft Shell              
├─ imports               # 功能模块目录(按功能拆分配置)
│  ├─ develop.nss        # 开发工具相关菜单(VS Code、dotnet 命令等)
│  ├─ file-manage.nss    # 文件管理操作(复制路径、修改扩展名、属性等)
│  ├─ goto.nss           # 快速跳转系统文件夹(Windows、Program Files、用户目录等)
│  ├─ images.nss         # 所有菜单图标的 SVG 定义(变量名如 @copy、@delete)
│  ├─ modify.nss         # 修改 / 隐藏 / 移动 Windows 原生菜单项的规则
│  ├─ taskbar.nss        # 任务栏右键菜单增强(窗口管理、启动应用等)
│  ├─ terminal.nss       # 终端子菜单(CMD、PowerShell、Windows Terminal)
│  └─ theme.nss          # 菜单外观主题(颜色、暗色模式、图标对齐、间距等)
├─ LICENSE             
├─ readme.txt          
├─ shell.dll           
├─ shell.exe           
└─ shell.nss             # 主配置文件(import 上述模块、定义全局菜单结构)

以下是我的汉化配置(修改后需重新注册或重启资源管理器):

Plaintextshell.nss
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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'
Plaintextimports/develop.nss
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
menu(mode="multiple" title='开发工具' vis=key.shift() sep=sep.bottom image=\uE26E)
{
	menu(mode="single" title='编辑器' image=\uE17A)
	{
		item(title='Visual Studio Code' image=[\uE272, #22A7F2] cmd='code' args='"@sel.path"')
		separator
		item(type='file' mode="single" title='记事本' image cmd='@sys.bin\notepad.exe' args='"@sel.path"')
	}

	menu(mode="multiple" title='.NET' image=\uE143)
	{
		item(title='运行项目' cmd-line='/K dotnet run' image=\uE149)
		item(title='监视模式' cmd-line='/K dotnet watch')
		item(title='清理项目' image=\uE0CE cmd-line='/K dotnet clean')
		separator
		item(title='生成调试版' cmd-line='/K dotnet build')
		item(title='生成发布版' cmd-line='/K dotnet build -c release /p:DebugType=None')

		menu(mode="multiple" sep="both" title='发布' image=\ue11f)
		{
			$publish='dotnet publish -r win-x64 -c release --output publish /*/p:CopyOutputSymbolsToPublishDirectory=false*/'
			item(title='发布单文件' sep="after" cmd-line='/K @publish --no-self-contained /p:PublishSingleFile=true')
			item(title='框架依赖部署' cmd-line='/K @publish')
			item(title='框架依赖可执行文件' cmd-line='/K @publish --self-contained false')
			item(title='独立部署' cmd-line='/K @publish --self-contained true')
			item(title='单文件(未裁剪)' cmd-line='/K @publish /p:PublishSingleFile=true /p:PublishTrimmed=false')
			item(title='单文件(已裁剪)' cmd-line='/K @publish /p:PublishSingleFile=true /p:PublishTrimmed=true')
		}
		
		item(title='EF 迁移:添加 InitialCreate' cmd-line='/K dotnet ef migrations add InitialCreate')
		item(title='EF 更新数据库' cmd-line='/K dotnet ef database update')
		separator
		item(title='帮助' image=\uE136 cmd-line='/k dotnet -h')
		item(title='版本信息' cmd-line='/k dotnet --info')
	}
}
Plaintextimports/file-manage.nss
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
menu(where=sel.count>0 type='file|dir|drive|namespace|back' mode="multiple" title='文件管理' image=\uE253)
{
	menu(separator="after" title=title.copy_path image=icon.copy_path)
	{
		item(where=sel.count > 1 title='复制已选中的 (@sel.count) 个项目' cmd=command.copy(sel(false, "\n")))
		item(mode="single" title=@sel.path tip=sel.path cmd=command.copy(sel.path))
		item(mode="single" type='file' separator="before" find='.lnk' title='打开文件所在路径')
		separator
		item(mode="single" where=@sel.parent.len>3 title=sel.parent cmd=@command.copy(sel.parent))
		separator
		item(mode="single" type='file|dir|back.dir' title=sel.file.name cmd=command.copy(sel.file.name))
		item(mode="single" type='file' where=sel.file.len != sel.file.title.len title=@sel.file.title cmd=command.copy(sel.file.title))
		item(mode="single" type='file' where=sel.file.ext.len>0 title=sel.file.ext cmd=command.copy(sel.file.ext))
	}

	item(mode="single" type="file" title="修改扩展名" image=\uE0B5 cmd=if(input("修改扩展名", "输入新的扩展名"),
		io.rename(sel.path, path.join(sel.dir, sel.file.title + "." + input.result))))

	menu(separator="after" image=\uE290 title=title.select)
	{
		item(title="全部选中" image=icon.select_all cmd=command.select_all)
		item(title="反向选择" image=icon.invert_selection cmd=command.invert_selection)
		item(title="取消全选" image=icon.select_none cmd=command.select_none)
	}

	item(type='file|dir|back.dir|drive' title='获取所有权' image=[\uE194,#f00] admin
		cmd args='/K takeown /f "@sel.path" @if(sel.type==1,null,"/r /d y") && icacls "@sel.path" /grant *S-1-5-32-544:F @if(sel.type==1,"/c /l","/t /c /l /q")')
	separator
	menu(title="显示/隐藏" image=icon.show_hidden_files)
	{
		item(title="系统文件" image=inherit cmd='@command.togglehidden')
		item(title="文件扩展名" image=icon.show_file_extensions cmd='@command.toggleext')
	}

	menu(type='file|dir|back.dir' mode="single" title='文件属性' image=icon.properties)
	{
		$atrr = io.attributes(sel.path)
		item(title='隐藏' checked=io.attribute.hidden(atrr)
			cmd args='/c ATTRIB @if(io.attribute.hidden(atrr),"-","+")H "@sel.path"' window=hidden)

		item(title='系统' checked=io.attribute.system(atrr)
			cmd args='/c ATTRIB @if(io.attribute.system(atrr),"-","+")S "@sel.path"' window=hidden)

		item(title='只读' checked=io.attribute.readonly(atrr)
			cmd args='/c ATTRIB @if(io.attribute.readonly(atrr),"-","+")R "@sel.path"' window=hidden)

		item(title='存档' checked=io.attribute.archive(atrr)
			cmd args='/c ATTRIB @if(io.attribute.archive(atrr),"-","+")A "@sel.path"' window=hidden)
		separator
		item(title="创建日期" keys=io.dt.created(sel.path, 'y/m/d') cmd=io.dt.created(sel.path,2000,1,1) vis=label)
		item(title="修改日期" keys=io.dt.modified(sel.path, 'y/m/d') cmd=io.dt.modified(sel.path,2000,1,1) vis=label)
		item(title="访问日期" keys=io.dt.accessed(sel.path, 'y/m/d') cmd=io.dt.accessed(sel.path,2000,1,1) vis=label)
	}

	menu(mode="single" type='file' find='.dll|.ocx' separator="before" title='注册服务器' image=\uea86)
	{
		item(title='注册' admin cmd='regsvr32.exe' args='@sel.path.quote' invoke="multiple")
		item(title='注销' admin cmd='regsvr32.exe' args='/u @sel.path.quote' invoke="multiple")
	}

	menu(mode="single" type='back' expanded=true)
	{
		menu(separator="before" title='新建文件夹' image=icon.new_folder)
		{
			item(title='以日期时间命名' cmd=io.dir.create(sys.datetime("ymdHMSs")))
			item(title='以 GUID 命名' cmd=io.dir.create(str.guid))
		}

		menu(title='新建文件' image=icon.new_file)
		{
			$dt = sys.datetime("ymdHMSs")
			item(title='TXT 文件' cmd=io.file.create('@(dt).txt', 'Hello World!'))
			item(title='XML 文件' cmd=io.file.create('@(dt).xml', '<root>Hello World!</root>'))
			item(title='JSON 文件' cmd=io.file.create('@(dt).json', '[]'))
			item(title='HTML 文件' cmd=io.file.create('@(dt).html', "<html>\n\t<head>\n\t</head>\n\t<body>Hello World!\n\t</body>\n</html>"))
		}
	}

	item(where=!wnd.is_desktop title=title.folder_options image=icon.folder_options cmd=command.folder_options)
}
Plaintextimports/goto.nss
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
menu(type='*' where=window.is_taskbar||sel.count mode=mode.multiple title=title.go_to sep=sep.both image=\uE14A)
{
	menu(title='系统文件夹' image=\uE1F4)
	{
		item(title='Windows' image=inherit cmd=sys.dir)
		item(title='System' image=inherit cmd=sys.bin)
		item(title='Program Files' image=inherit cmd=sys.prog)
		item(title='Program Files (x86)' image=inherit cmd=sys.prog32)
		item(title='ProgramData' image=inherit cmd=sys.programdata)
		item(title='应用程序列表' image=inherit cmd='shell:appsfolder')
		item(title='用户目录' image=inherit cmd=sys.users)
		separator
		//item(title='@user.name@@@sys.name' vis=label)
		item(title='桌面' image=inherit cmd=user.desktop)
		item(title='下载' image=inherit cmd=user.downloads)
		item(title='图片' image=inherit cmd=user.pictures)
		item(title='文档' image=inherit cmd=user.documents)
		item(title='开始菜单' image=inherit cmd=user.startmenu)
		item(title='用户配置' image=inherit cmd=user.dir)
		item(title='AppData' image=inherit cmd=user.appdata)
		item(title='临时文件夹' image=inherit cmd=user.temp)
	}
	item(title=title.control_panel image=\uE0F3 cmd='shell:::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}')
	item(title='所有控制面板项' image=\uE0F3 cmd='shell:::{ED7BA470-8E54-465E-825C-99712043E01C}')
	item(title=title.run image=\uE14B cmd='shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}')
	menu(where=sys.ver.major >= 10 title=title.settings sep=sep.before image=\uE0F3)
	{
		// https://docs.microsoft.com/en-us/windows/uwp/launch-resume/launch-settings-app
		item(title='系统' image=inherit cmd='ms-settings:')
		item(title='关于' image=inherit cmd='ms-settings:about')
		item(title='你的信息' image=inherit cmd='ms-settings:yourinfo')
		item(title='系统信息' image=inherit cmd-line='/K systeminfo')
		item(title='搜索' cmd='search-ms:' image=inherit)
		item(title='USB' image=inherit cmd='ms-settings:usb')
		item(title='Windows 更新' image=inherit cmd='ms-settings:windowsupdate')
		item(title='Windows Defender' image=inherit cmd='ms-settings:windowsdefender')
		menu(title='应用' image=inherit)
		{
			item(title='应用和功能' image=inherit cmd='ms-settings:appsfeatures')
			item(title='默认应用' image=inherit cmd='ms-settings:defaultapps')
			item(title='可选功能' image=inherit cmd='ms-settings:optionalfeatures')
			item(title='启动项' image=inherit cmd='ms-settings:startupapps')
		}
		menu(title='个性化' image=inherit)
		{
			item(title='个性化' image=inherit cmd='ms-settings:personalization')
			item(title='锁屏界面' image=inherit cmd='ms-settings:lockscreen')
			item(title='背景' image=inherit cmd='ms-settings:personalization-background')
			item(title='颜色' image=inherit cmd='ms-settings:colors')
			item(title='主题' image=inherit cmd='ms-settings:themes')
			item(title='开始菜单' image=inherit cmd='ms-settings:personalization-start')
			item(title='任务栏' image=inherit cmd='ms-settings:taskbar')
		}
		menu(title='网络' image=inherit)
		{
			item(title='状态' image=inherit cmd='ms-settings:network-status')
			item(title='以太网' image=inherit cmd='ms-settings:network-ethernet')
			item(title='网络连接' image=inherit cmd='shell:::{7007ACC7-3202-11D1-AAD2-00805FC1270E}')
		}
	}
}
Plaintextimports/modify.nss
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// modify items
// Remove items 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)
Plaintextimports/taskbar.nss
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
menu(type="taskbar" vis=key.shift() or key.lbutton() pos=0 title=app.name image=\uE249)
{
	item(title="配置" image=\uE10A cmd='"@app.cfg"')
	item(title="管理器" image=\uE0F3 admin cmd='"@app.exe"')
	item(title="安装目录" image=\uE0E8 cmd='"@app.dir"')
	item(title="版本\t"+@app.ver vis=label col=1)
	item(title="文档" image=\uE1C4 cmd='https://nilesoft.org/docs')
	item(title="捐赠" image=\uE1A7 cmd='https://nilesoft.org/donate')
}

menu(where=@(this.count == 0) type='taskbar' image=icon.settings expanded=true)
{
	menu(title="常用应用" image=\uE254)
	{
		item(title='画图' image=\uE116 cmd='mspaint')
		item(title='Edge' image cmd='@sys.prog32\Microsoft\Edge\Application\msedge.exe')
		item(title='计算器' image=\ue1e7 cmd='calc.exe')
		item(title=str.res('regedit.exe,-16') image cmd='regedit.exe')
	}
	menu(title="窗口" image=\uE1FB)
	{
		item(title="层叠窗口" cmd=command.cascade_windows)
		item(title="堆叠显示" cmd=command.Show_windows_stacked)
		item(title="并排显示" cmd=command.Show_windows_side_by_side)
		sep
		item(title="最小化所有窗口" cmd=command.minimize_all_windows)
		item(title="还原所有窗口" cmd=command.restore_all_windows)
	}
	item(title="显示桌面" image=icon.desktop cmd=command.toggle_desktop)
	item(title="设置" image=icon.settings(auto, image.color1) cmd='ms-settings:')
	item(title="任务管理器" sep=both image=icon.task_manager cmd='taskmgr.exe')
	item(title="任务栏设置" sep=both image=inherit cmd='ms-settings:taskbar')
	item(vis=key.shift() title="重启资源管理器" cmd=command.restart_explorer)
}
Plaintextimports/terminal.nss
1
2
3
4
5
6
7
8
9
menu(type='*' where=(sel.count or wnd.is_taskbar or wnd.is_edit) title="终端" sep='top' image=icon.run_with_powershell)
{
	$tip_run_admin=["\xE1A7 按 Shift 键以管理员身份运行" + this.title, tip.warning, 1.0]
	$has_admin=key.shift() or key.rbutton()

	item(title="CMD" tip=$tip_run_admin admin=$has_admin image cmd='cmd.exe' args='/K TITLE Command Prompt &ver& PUSHD "@sel.dir"')
	item(title="PowerShell" admin=$has_admin tip=$tip_run_admin image cmd='powershell.exe' args='-noexit -command Set-Location -Path "@sel.dir\."')
	item(where=package.exists("WindowsTerminal") title="终端" tip=$tip_run_admin admin=$has_admin image='@package.path("WindowsTerminal")\WindowsTerminal.exe' cmd='wt.exe' arg='-d "@sel.path\."')
}
Plaintextimports/theme.nss
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
theme
{	
	name="modern"
	dark=auto
	background
	{
		color=auto
		opacity=auto
		effect=auto
	}
	item
	{
		padding
		{
			right = 15
		}
	}

	image.align=2
}

菜单精简

Nilesoft Shell 也可以用来精简菜单,示例如下:

Plaintextshell.nss
1
2
3
4
// 在末尾添加
remove(find='"使用 Clipchamp 进行编辑"|"使用 Microsoft 画图进行编辑"|"使用“照片”编辑"|"在记事本中编辑"|"使用 Adobe Acrobat 共享(A)"')
remove(in="打开方式(H)" find='"画图"')
remove(in="更多选项" in="发送到(N)" find='"文档"')

一级菜单 remove(find='"目标"'),二级菜单 remove(in="一级菜单" find='"目标"'),三级菜单 remove(in="一级菜单" in="二级菜单" find='"目标"'),以此类推,每深一级就多加一个 in="菜单名"

另一款右键精简工具是蓝点 Lilac 开发的 ContextMenuManager。解压后以管理员身份运行 ContextMenuManager.NET.4.0.exe,按需开启和关闭文件、文件夹、桌面等场景的右键菜单项,同时可对菜单项进行更改文本、删除此项等操作。

ContextMenuManager
ContextMenuManager

其他规则 界面,提供了一系列增强菜单项,如在目录中添加清理回收站,桌面背景添加此电脑等。其中 GUID 锁 相当于在注册表 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked 下新建以菜单 GUID 命名的字符串(数值留空),即可隐藏该菜单,删除则恢复。

GUID 锁
GUID 锁

例如,想要隐藏右键菜单项 “使用 Clipchamp 进行编辑”({8AB635F8-9A67-4698-AB99-784AD929F3B4})、“使用照片编辑”({BFE0E2A4-C70C-4AD7-AC3D-10D1ECEBB5B4})、“使用 Microsoft 画图进行编辑”({2430F218-B743-4FD6-97BF-5C76541B4AE9})、“在记事本中编辑”({CA6CC9F1-867A-481E-951E-A28C5E4F01EA}),添加 GUID 锁定项目,重启资源管理器即可。2

窗口管理

Windows 自带的窗口控制功能较为有限,右键点击标题栏只能看到移动、大小、最小化、最大化、关闭等基本选项。如果需要更丰富的窗口操作(如置顶、调整透明度、快速对齐等),可以使用 AlexanderPro 开发的窗口增强工具 SmartContextMenu,通过 Ctrl + 鼠标右键 可为任意窗口(包括游戏、控制台等无标题栏的应用)提供置顶、透明度调节、卷起、隐藏等增强功能。

SmartContextMenu
SmartContextMenu

解压后以管理员身份运行 SmartContextMenu.exe,程序将驻留系统托盘;在任意窗口按 Ctrl + 鼠标右键,即可呼出增强菜单;右键托盘图标可打开设置,自定义快捷键、启用或禁用特定功能。

SmartContextMenu 设置
SmartContextMenu 设置

留言交流