AberSheeran
Aber Sheeran

Windows创建右键菜单

起笔自
所属文集: 程序杂记
共计 1562 个字符
落笔于

Windows右键菜单的管理是用的注册表。

选中文件后的右键菜单的管理路径在HKEY_CLASSES_ROOT\Directory\shell,在文件夹中空白处右键菜单在HKEY_CLASSES_ROOT\Directory\Background\shell

例子

以创建“在当前目录打开Ubuntu子系统”为例

  1. 使用Win+R运行regedit,打开路径HKEY_CLASSES_ROOT\Directory\Background\shell

  2. 新建,命名为Ubuntu,修改其中的默认的值为在此打开Ubuntu。这个内容将会显示在右键菜单上。

  3. Ubuntu上新建,命名为command,修改其中的默认的值为ubuntu1804.exe run,这将是当你单击右键菜单中对应选项时执行的命令。

  4. Ubuntu上新建可扩充字符串值,命名为Icon,值为图标文件的路径。路径如果是一个自带图标的exe文件也可以。

Python代码

将以上过程封装起来,即可获得以下代码。

import winreg

FILE_PATH = r"Directory\shell\\"
BACKGROUND_PATH = r"Directory\Background\shell\\"


def create(key, title, command, icon=None, BASE_PATH=BACKGROUND_PATH):
    """
    key:注册表中的键值
    title:显示在菜单里的内容
    command:具体执行的命令
    icon:图标的路径,可以不给出值
    """
    path = winreg.CreateKey(winreg.HKEY_CLASSES_ROOT, BACKGROUND_PATH + key)
    winreg.SetValueEx(path, "", 0, winreg.REG_EXPAND_SZ, title)
    if icon is not None:
        winreg.SetValueEx(path, "Icon", 0, winreg.REG_EXPAND_SZ, icon)
    command_path = winreg.CreateKey(path, "command")
    winreg.SetValue(command_path, "", winreg.REG_SZ, command)


if __name__ == "__main__":
    WINDOWS_APP = r"C:\Program Files\WindowsApps"
    ubuntu = WINDOWS_APP + r"\CanonicalGroupLimited.Ubuntu18.04on" \
        r"Windows_1804.2018.817.0_x64__79rhkp1fndgsc\ubuntu1804.exe"

    create("Ubuntu", "在此打开Ubuntu", ubuntu+' run', ubuntu)

在最近的Windows10 教育版更新中,已经自带了在此打开Linux Shell的功能,按住Shift右击鼠标即可。

如果你觉得本文值得,不妨赏杯茶
WSL连接远程服务器乱码问题
给CharField定义更优雅的Choice