Добавить пункт меню в контекстное меню 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

  1. В реестре (черезregedit.exe) перейдите к:

HKEY_CLASSES_ROOT\SystemFileAssociations\.jpg\Shell

  1. Создайте новый ключ с именем «MyApp».

  2. Создайте еще один ключ в MyApp и назовите его «команда».

  3. В команде измените значение на путь к вашему приложению, например:

"D:\Python_Programlar\pdftopng\app.exe" "%1"

  1. В MyApp введите текст в поле(Default)значение должно быть тем, что вы хотите видеть в контекстном меню.

  2. Необязательно: в 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\""
Другие вопросы по тегам