Добавить пункт меню в контекстное меню Windows только для определенного типа файла
Я разработал приложение, которое загружает изображение с помощью контекстного меню окна (щелкнуть правой кнопкой мыши по файлу) и на данный момент работает, но клавиша reg включена
HKEY_CLASSES_ROOT\*
и это работает со всеми файлами.
Я хочу, чтобы пункт меню в контекстном меню отображался только с файлами.jpg.
Кто я могу это сделать? Какие ключи реестра я должен использовать?
Заранее спасибо.
5 ответов
1) Определите тип файла (ProgID) для файлов.jpg
Это можно сделать, проверив значение по умолчанию HKEY_CLASSES_ROOT\.jpg
, Это может быть что угодно в зависимости от того, что вы установили, но для целей этого примера мы назовем это jpegfile
, общий по умолчанию.
2) Установите свойства пункта контекстного меню (глагол) для этого типа файла
Вы можете установить пункты контекстного меню для пользователя в HKEY_CURRENT_USER\Software\Classes\jpegfile\shell
, Этот ключ имеет список глаголов для типа файла. Есть похожий ключ в HKEY_LOCAL_MACHINE\Software\Classes\jpegfile\shell
, и это системные значения по умолчанию для типа файла. Вы также можете поместить ключ глагола туда, но если такой же ключ существует в HKCU, он будет переопределен, поэтому имейте в виду.
3) Установите значение команды
Минимальное значение ключа, которое необходимо установить, чтобы заставить его работать, является значением по умолчанию command
подключ. Вам нужно установить это с помощью пути к вашему приложению, например, так: HKEY_CURRENT_USER\Software\Classes\jpegfile\shell\open_with_myapp\command
будет установлен на "c:\path\to\myapp.exe" "%1"
, Теперь контекстное меню для файлов.jpg будет иметь элемент "open_with_myapp", который запустит ваше приложение при нажатии и передаст имя выбранного файла в качестве параметра. Конечно, от того, как ваше приложение обрабатывает параметры, зависит от вас, поэтому вам нужно установить строку параметров в то, что ваше приложение может обработать.
4) Установите другие свойства глагола
Я предполагаю, что вы, вероятно, захотите, чтобы пункт контекстного меню читал что-то более дружественное, чем название ключа. Вы можете сделать так, чтобы контекстное меню отображало любую метку, которую вы хотите для своего элемента, установив значение по умолчанию для этой клавиши (open_with_myapp
).
Это ваш основной обзор. Обязательно ознакомьтесь с моим ответом на этот вопрос о сопоставлении файла, на который есть аналогичный ответ:
В реестре есть еще один ключ, который работает независимо от пользовательских программ по умолчанию: HKEY_CLASSES_ROOT\SystemFileAssociations
, Поскольку никто не упомянул об этом в этом вопросе... Не нужно проверять ProgID перед добавлением пункта контекстного меню. Пример:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\SystemFileAssociations\.mkv\shell\subtitle]
@="Search subtitles..."
[HKEY_CLASSES_ROOT\SystemFileAssociations\.mkv\shell\subtitle\command]
@="\"D:\\Tools\\subsearch.exe\" \"%1\""
Ссылка: https://msdn.microsoft.com/en-us/library/windows/desktop/ee872121(v=vs.85).aspx
- В реестре (через
regedit.exe
) перейдите к:
HKEY_CLASSES_ROOT\SystemFileAssociations\.jpg\Shell
Создайте новый ключ с именем «MyApp».
Создайте еще один ключ в MyApp и назовите его «команда».
В команде измените значение на путь к вашему приложению, например:
"D:\Python_Programlar\pdftopng\app.exe" "%1"
В MyApp введите текст в поле
(Default)
значение должно быть тем, что вы хотите видеть в контекстном меню.Необязательно: в MyApp добавьте новое строковое значение или расширяемое строковое значение и установите его в качестве пути к файлу значка приложения (.ico) (например, «D:\Python_Programlar\pdftopng\app.ico»), чтобы увидеть значок рядом с вашим новая запись в контекстном меню Проводника Windows:
Вы можете попробовать использовать Nilesoft Shell. Где вы редактируете и настраиваете элементы контекстного меню более профессионально. Пример добавления пункта меню в файл .txt
shell
{
dynamic
{
item(type='file' find='.txt'
title='edit with windows notepad'
cmd='notepad.exe'
args='@sel.path')
}
}
Опубликую свое рабочее решение, полученное на основе предыдущего ответа (и другого ответа его автора). Он также добавляет значок. Я использовал его для всех типов файлов и не имел прав администратора. Подпункт
*
в моем реестре не было, я сам его завел.
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Classes\*]
[HKEY_CURRENT_USER\Software\Classes\*\shell]
[HKEY_CURRENT_USER\Software\Classes\*\shell\open_with_notepad_pp]
@="Open with Notepad++"
"icon"="C:\\portable\\npp.7.9\\notepad++.exe"
[HKEY_CURRENT_USER\Software\Classes\*\shell\open_with_notepad_pp\command]
@="\"C:\\portable\\npp.7.9\\notepad++.exe\" \"%1\""