luoheng
8/15/2019 - 1:48 PM

添加右键菜单


import os
import sys
import winreg


class Reg:
    File = "*\\shell"
    Folder = "directory\\shell"
    FileAndFolder = "ALLFilessystemObjects\\shell"

    @staticmethod
    def _addKey(path, Type):
        key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, Type)
        name = os.path.basename(path)
        i = name.index(".")
        if i != -1:
            name = name[:name.index(".")]
        name = f"open with {name}"
        winreg.SetValue(key, name, winreg.REG_SZ, name)
        nameKey = winreg.OpenKey(key, name)
        winreg.SetValue(nameKey, 'command', winreg.REG_SZ, f"{path} %1")
        winreg.CloseKey(nameKey)
        winreg.CloseKey(key)

    @staticmethod
    def _removeKey(path, Type):
        key = winreg.OpenKey(winreg.HKEY_CLASSES_ROOT, Type)
        name = os.path.basename(path)
        i = name.index(".")
        if i != -1:
            name = name[:name.index(".")]
        name = f"open with {name}"
        nameKey = winreg.OpenKey(key, name)
        winreg.DeleteKey(nameKey, "command")
        winreg.CloseKey(nameKey)
        winreg.DeleteKey(key, name)
        winreg.CloseKey(key)

    @classmethod
    def addFile(cls, path):
        cls._addKey(path, cls.File)

    @classmethod
    def addFolder(cls, path):
        cls._addKey(path, cls.Folder)

    @classmethod
    def addFileAndFolder(cls, path):
        cls._addKey(path, cls.FileAndFolder)

    @classmethod
    def removeFile(cls, path):
        cls._removeKey(path, cls.File)

    @classmethod
    def removeFolder(cls, path):
        cls._removeKey(path, cls.Folder)

    @classmethod
    def removeFileAndFolder(cls, path):
        cls._removeKey(path, cls.FileAndFolder)

def test():
    path = r"C:\Users\luoheng\Anaconda3\python.exe"
    Reg.addFile(path)

def cleanTest():
    path = r"C:\Users\luoheng\Anaconda3\python.exe"
    Reg.removeFile(path)

def main():
    # test()
    # cleanTest()
    path = sys.argv[1]
    Reg.addFile(path)


if __name__ == "__main__":
    main()