暴力整合 windows terminal 到系统各处快捷菜单中

参考文章:

添加管理员模式 powershell

  1. 安装 gsudo

    1
    choco install gsudo -y
  2. 新增 json 配置块,点击加号->settings,在 profiles->list 中添加。

    1
    2
    3
    4
    5
    6
    7
    8
    {
    "guid": "{0667cbea-6f8d-43d6-b50a-e4f795569d86}",
    "name": "Elevated PowerShell",
    "commandline": "gsudo.exe PowerShell",
    "icon": "C:/Users/zbttl/Pictures/powershell_red_scale-200.ico",
    "hidden": false,
    "colorScheme": "AdventureTime"
    },

    其中,icon 里的图标可从参考文章 1 中下载,下载后需要处理,图片像素缩小为 32x32(否则会出现明显的锯齿)。并转为 .ico 格式,主要保留透明度(即保证背景不是黑色的而是透明的),因为后面一步注册表中的参数不认得 ico 格式以为的图片。这些修改都可以用 ifranview 搞掂。

    而 colorScheme,可以从这里找:mbadolato/iTerm2-Color-Schemes,选好想要的主题,找到对应的配置文件,将其中的代码加到 schemes 中。修改的目的是让管理员模式和普通用户模式有区分度。

  3. 保存后在加号处就能看到该配置了。

添加进右键菜单

  1. 输入代码

    1
    2
    3
    4
    $basePath = "Registry::HKEY_CLASSES_ROOT\Directory\Background\shell"
    New-Item -Path "$basePath\wt" -Force -Value "Windows Terminal"
    New-ItemProperty -Path "$basePath\wt" -Force -Name "Icon" -PropertyType ExpandString -Value "X:\path\to\terminal.ico"
    New-Item -Path "$basePath\wt\command" -Force -Type ExpandString -Value '"%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe" -p "Windows PowerShell" -d "%V"'

    其中,"X:\path\to\terminal.ico" 修改为上一步通过修改的 ico 文件路径。最后一句中 -p 后面的参数 Windows PowerShell 改成自己配置文件中 powershell 所在代码块的 name。当然如果输错也可以进入注册表中再做修改,键值在 HKEY_CLASSES_ROOT\Directory\Background\shell\wt 中。

  2. 上面添加的是在文件管理器中右键以普通用户打开 windows terminal。而以管理员模式打开,还需要再新建键值。在上面代码块的第二句 $basePath\wt 中的 wt 键值需要修改为其他名字,-p 后的代码块也要更换,图标最好也更换一下。打个比方:

    1
    2
    3
    New-Item -Path "$basePath\wtAdmin" -Force -Value "Windows Terminal(Admin)"
    New-ItemProperty -Path "$basePath\wtAdmin" -Force -Name "Icon" -PropertyType ExpandString -Value "X:\path\to\terminal.ico"
    New-Item -Path "$basePath\wtAdmin\command" -Force -Type ExpandString -Value '"%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe" -p "Elevated PowerShell" -d "%V"'

(21.1.30 更新) windows Terminal 新版本已经将快捷方式自动加入右键菜单中。但目前还不成熟:

  1. 没有管理员模式打开。

  2. 在 Directory Opus 等第三方文件管理器中不生效。

  3. 其实只在少数文件夹(如桌面)下生效。在其他文件夹下打开报错「服务器出现意外情况」。

添加进 win+x 快速链接菜单

参考文章:

  • [How to Add or Remove Default Items on Win+X Quick Link Menu in Windows 10](How to Add or Remove Default Items on Win+X Quick Link Menu in Windows 10)
  • riverar/hashlnk

很多时候我们要右键打开 powershell 还要退到桌面或是资源管理器处,如果在快速链接菜单(右键 windows 徽标)就能打开 windows terminal 就会方便很多。

右键菜单的结构,取决于 %LocalAppdata%\Microsoft\Windows\WinX 这个目录的结构。

总结一下,有这么几个规律:

  1. 里面的项目都是快捷方式,这个应该一眼就能看出来。你看到的文件名并不是真实的文件名,用第三方资源管理器或者用 dir 命令查看就知道

  2. 但修改某项文件名不会使该项消失,而是会改变某项的位置。具体位置取决于真实文件名按名称方式倒序排列后的位置。

    • 也就是说,如果你想让新加进来的项目排在 group 的最顶上,其实什么都不用动,因为一般来说程序都是以字母开头,字母开头一定会排在原来这些数字开头程序的上面(倒序)。
    • 反过来,如果你要把新增的项目放在中间,那就要修改其中一个项目的真实文件名,比如你要将新建的项目放在计算机管理的后面,并把计算机管理调到最前,你可以将计算机管理的真实文件名前面的序号改成 11,在新增项目的真实文件名前面加上 03 -
    • 如果不想调整计算机管理的位置,那么将新增项目的真实文件名前面加上 02b - 应该也可以;如果想把新增项目放在最后,将新增项目的真实文件名前面加上 00 - 就行。

    另外,因为 group3 项目比较多,所以才用两位数字的前缀,group2 就用的是一个数字的前缀,但原理相同。

  3. 不过,新增的项目不会立刻生效,而其前缀也会在资源管理器中表现出来,而不是和原有的项目一样自动将前缀隐藏。原因是,原有的项目在注册表中绑定了,绑定的依据是快捷方式属性中的「目标」这一项。所以你想通过修改原来快捷方式的目标直接让其打开其他程序这个方法是不行的。直接将新增项目放进文件夹里面也不会识别,修改这些原有项目的文件名不会使快捷链接中项目的名字被变更。但反过来,直接删除这些快捷方式的话,是能够生效的。

  4. 所以,如果要新增项目的话,就需要用上面参考文章的 hashlnk 这款软件。使用方法也很简单,先把快捷方式放到相应位置,快捷方式的参数也可以进行适当修改。之后,就需要运行命令(powershell 不认 %LOCALAPPDATA%,只能用全名)。

    1
    hashlnk.exe 'C:\Users\[用户名]\AppData\Local\Microsoft\Windows\WinX\Group3\[快捷方式名]'
  5. 要修改快捷链接中的名字也可以,在相应项目属性中修改描述就行了。

综上,我们要添加 windows terminal,按以下步骤:

  1. 复制 %LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe,在 %LocalAppdata%\Microsoft\Windows\WinX\Group3 中粘贴快捷方式

  2. 修改快捷方式 wt.exe 的属性和文件名。文件名修改成你顺耳的,并且我想让其挨在 powershell 的项目旁边。所以我将名字修改为 00 - windowsTerminal。属性中,目标修改为 "%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe" -p "Windows PowerShell",描述修改为 Windows Terminal

  3. 在 hashInk.exe 所在目录运行

    1
    .\hashlnk.exe 'C:\Users\zbttl\AppData\Local\Microsoft\Windows\WinX\Group3\00 - windowsTerminal.lnk'

重启资源管理器即可。