Простой и интуитивно понятный способ добавления пользовательских сценариев в ваш контекст, щелкший Windows.
Вы можете скачать файл pywin_contextmenu.py из этого репозитория (https://raw.githubusercontent.com/naveennamani/pywin_contextmenu/master/pywin_contextmenu.py) и поместите файл в свою папку Scripts.
Или вы можете установить этот пакет из PYPI, используя
pip install pywin-contextmenuи просто импортируйте в свои сценарии.
import pywin_contextmenu as pycm import pywin_contextmenu as pycm
# create a group
group1 = pycm . ContextMenuGroup ( "My python scripts" )
# convert your script into executable command
script_cmd = pycm . python_script_cmd ( "scripts/clean_empty_folders.py" , rel_path = True , hide_terminal = True )
# create the item
item1 = pycm . ContextMenuItem ( "Clean empty folders" , script_cmd )
# add item to the group
group1 . add_item ( item1 )
# or
group1 . add_items ([ item1 ])
# get root_key
rk = pycm . get_root ( pycm . UserType . CURR_USER , pycm . RootType . DIR_BG )
# Create the group and test
group1 . create ( rk )
########################
# In a more pythonic way
########################
pycm . ContextMenuGroup ( "Group 1" , items = [
pycm . ContextMenuItem ( "Open CMD" , "cmd.exe" ),
pycm . ContextMenuItem ( "Open CMD 2" , "cmd.exe" )
]). create (
pycm . get_root ( pycm . UserType . CURR_USER , pycm . RootTYpe . DIR_BG )
) import pywin_contextmenu as pycm
def test_function ( file_or_dir_name ):
print ( file_or_dir_name )
input ( "Press ENTER to continue" )
# create the nested groups to execute direct commands, python functions
# and python scripts
cmgroup = pycm . ContextMenuGroup ( "Group 1" , items = [
pycm . ContextMenuItem ( "Open cmd" , "cmd.exe" ),
pycm . PythonContextMenuItem ( "Test py" , test_function ),
pycm . ContextMenuGroup ( "Group 2" , items = [
pycm . PythonContextMenuItem ( "Python script test" , pycm . python_script_cmd (
"example.py" , rel_path = True , hide_terminal = True
))
])
])
# create the group for the current user to be shown on right click of
# directory, directory background and for python files
cmgroup . create_for ( pycm . UserType . CURR_USER , [
pycm . RootType . DIR ,
pycm . RootType . DIR_BG ,
pycm . RootType . FILE . format ( FILE_TYPE = ".py" )
]) Сценарий зависит от двух основных классов ContextMenuItem и ContextMenuGroup .
ContextMenuItemЭто пункт меню, который запускает и запускает команду при нажатии в контексте. Подпись этого класса
ContextMenuItem (
item_name , # name of the item to be shown
command , # command to be executed when selected
item_reg_key = "" , # registry key associated with the item
# (if not given will be treated as item_name)
icon = "" , # path to an icon to be shown with the item
extended = False # set to True if the item is to be shown when right clicked with shift button
) .create(root_key: HKEYType) - добавляет элемент в реестр в данном реестре root_key . Получите root_key , используя метод утилиты get_root .
.create_for(user_type: UserType, root_type: List[RootType]) - добавляет элементы для данного пользователя и заданные локации Root.
.delete(root_key: HKEYType) - удалить элемент на данном root_key .
.delete_for(user_type: UserType, root_type: List[RootType]) - удалить элементы для данного пользователя и локаций Root.
.delete не является предпочтительной, так как любой root_key может быть передан. Вместо этого, пожалуйста, используйте .delete_for Метод, так как ключи реестра, которые будут удалены, будут автоматически и безопасно удалены.PythonContextMenuItem Этот класс наследует ContextMenuItem и преобразует функцию Python в исполняемую команду. Просто передайте функцию Python как аргумент python_function .
PythonContextMenuItem (
item_name ,
python_function : Callable [[ str ], Any ], # callable python function which should take file/folder name as the single argument
item_reg_key = "" ,
icon = "" ,
extended = False
)ContextMenuGroupЭтот класс группирует несколько элементов и подгрупп.
ContextMenuGroup (
group_name , # name of the group to be shown
group_reg_key = "" , # registry key associated with the group
icon = "" , # path to an icon to be shown with the group
extended = False , # set to True if the group is to be shown when right clicked with shift button
items = [] # items to be displayed on this group
) Для добавления элементов или групп в метод класса add_item / add_items .
ContextMenuGroup . add_item ( item )
# or
ContextMenuGroup . add_item ( subgroup )
# for multiple items
ContextMenuGroup . add_items ([ item1 , item2 , subgroup1 , subgroup2 ])ContextMenuGroup путем передачи элементов, используя ключевое слово items . Затем создать группу и добавить get_root контекст, просто вызов .create
ContextMenuGroup.create(root_key) # Create the group and add to contextmenu
В классе также есть метод .create , .create_for , .delete и .delete_for Methods, такие как методы ContextMenuItem .
ContextMenuItem и ContextMenuGroup возвращают self , чтобы их можно было приколоть. Добавление элементов в ContextMenuGroup не добавит их в реестр ContextMenu/, если не вызван метод. .create . RootType - Enum для выбора, где будет отображаться элемент/группа контекстного менюUserType - Enum для выбора, добавить ли контекстное меню для текущего пользователя или для всех пользователейget_root(user_type: UserType, root_type: RootType, file_type: str) - создает/открывает ключ реестра для выбранного user_type и root_type. Если root_type является RootType.FILE , то требуется аргумент file_type и указывает на расширение файла.python_script_cmd(script_path, rel_path = False, hide_terminal = False) - функция утилиты для преобразования заданного script_path в исполняемую команду.delete_item(root_key, item_reg_key) - удаляет item_reg_key в данном реестре root_key . ПРЕДУПРЕЖДЕНИЕ: Пожалуйста, убедитесь, что вы не удаляете ключи на ключах реестра верхнего уровня (например, HKEY_CLASSES_ROOT , HKEY_CURRENT_USER и т. Д.)