popkov Цитата: Не хочу загромождать и так большие контекстные меню. К тому же файлов такого типа может не оказаться в папке. Это нерационально.
Исходя из этой фразы смею предположить, что твои мучения по поиску подходящего варианта вызваны незнанием принципа организации контекстного меню. Поэтому объясню подробно
Цитата: как можно создать у конкретного типа файла вложенное контекстное меню
что скорей всего и поможет тебе решить поставленную задачу.
Любое контекстное меню файлов/папок генерируется на лету каждый раз когда ты его вызываешь. Генерация эта происходит путем выборки соответствующих ключей реестра отвечающих за то или иное разрешение файла или за папку. Таким образом ты можешь создавать пункты для строго определенных расширений, которые не будут показываться при выборе других (можно также создавать и для всех сразу).
Как происходит генерация контекстного меню (рассмотрим на примере TXT-файла):
1. Обращение к ключу реестра HKCR\.txt для выборки значения параметра "(По умолчанию)". Допустим значение это - txtfile
2. Обращение к ключу HKCR\txtfile
Внутри него находится ключ "shell" и далее ключи open, print и т.д.
Вот эти ключи грубо говоря как раз и являются пунктами контекстного меню TXT-файла - "Открыть", "Печать" и т.д.
В каждом из этих ключей есть обязательный подключ "command", в значении параметра "(По умолчанию)" которого содержится действие выполняемое при активизации пункта контекстного меню, за который он отвечает. То бишь это просто путь к программе с помощью которой например нужно открыть/редактировать/распечатать/... данный файл. В конце пути через пробел помещается знак "%1" являющийся эквивалентом полного названия искомого файла для подстановки в конец прописанного пути. Например запись "notepad %1" эквивалентна выполнению команды "notepad <название файла>".
- Значение параметра "(По умолчанию)" в ключах open, edit, print и т.д. отвечает за то как эти пункты будут называться при открытии контекстного меню.
- Значение параметра "(По умолчанию)" в ключе "shell" отвечает за очередность появления пунктов в контекстном меню. Например если присвоить параметру значение "open, print", то пункт "Открыть" будет в контекстном меню выше пункта "Печать", соответственно если написать "print, open", то наоборот - сначала будет идти пункт "Печать", а за ним "Открыть". Если же вписать одно слово, например "print", то это действие будет выполняться по умолчанию при двойном клике на файл.
Рассмотрим пример как создать пункт меню "Открыть в AkelPad" для TXT-файла:
1. Смотрим значение параметра "(По умолчанию)" у ключа HKCR\.txt
2. Находим ключ название которого совпадает с названием найденным в п.1
3. В этом ключе находим ключ "shell" и создаем в нем подключ например "open1" (всё без кавычек)
4. Присваиваем значение "(По умолчанию)" этого ключа - "Открыть в AkelPad".
5. В ключе "open1" создаем подключ "command" и присваиваем ему значение, например - "C:\Utilities\Akelpad\akelpad.exe %1"
Таким образом получаем пункт "Открыть в AkelPad" для любого TXT-файла, позволяющий редактировать файл в этой программе. Разумеется файл откроется в программе лишь при ее наличии.
Для потенциально желающих меня поравить скажу, что вышеописанное мной довольно упрощенная схема, с намеренно не включенными подробностями во избежание загромождения руководства ненужными в рамках данного вопроса деталями.