Из этой статьи вы узнаете, как добавить в контекстное меню файлов пункт для их открытия в нужной программе. На примере текстового редактора я покажу, как редактировать в нем файлы с обычными и полными правами. Вы сможете использовать этот способ для открытия файлов из контекстного меню в любых программах.
Написать материал меня подтолкнуло обсуждение проблемы, с которой сталкиваются люди, использующие UAC, при попытке быстро отредактировать файл, расположенный в системной папке. Я расскажу, как решил эту проблему для себя.
Впрочем, открытию файлов с полными правами будет посвящена вторая часть статьи. А сегодня речь пойдет о пункте меню для открытия файлов с обычными правами. Этого достаточно в большинстве случаев, а при отключенном контроле учетных записей – всегда.
Цель — ускорение работы
Добавив возможность открытия файлов в любимой программе из контекстного меню, вы ускоряете свою работу в системе. Вам не нужно использовать диалоговое окно «Открыть с помощью», которое, кстати, бесполезно, если надо открыть файл с полными правами.
Блокнот, входящий в состав Windows 7, интегрирован в контекстное меню. Для многих типов файлов в нем отображается пункт «Изменить», с помощью которого файл можно быстро открыть в блокноте.
Однако этот пункт есть далеко не у всех типов файлов, не говоря уже о файлах без расширений. Можно повысить скорость своей работы в системе, добавив в контекстное меню пункт для открытия любых файлов в блокноте.
Не удивлюсь, если вместо блокнота вы используете сторонний редактор с более широкими возможностями. Большинство текстовых редакторов умеет интегрироваться в контекстное меню. Например, Notepad++ делает это самостоятельно, а Akelpad — помощью плагинов.
Однако при включенном UAC этот способ не подходит для правки файлов в системных папках Program Files или Windows (классический пример — файл hosts). Даже если файл откроется, сохранить изменения в нем не удастся.
Это происходит потому, что из контекстного меню редактор запускается с обычными правами, наследуя права проводника. А для сохранения файлов в системных папках нужны права администратора.
Кроме того, не все программы умеют интегрироваться в контекстное меню, и дальше мы займемся устранением этого недостатка. Если вы читали другие мои статьи на тему контекстных меню, вам многое будет знакомо.
Добавление пункта в контекстное меню всех типов файлов
Добавить в контекстное меню запуск программы с обычными правами очень просто, и я покажу это на примере блокнота.
Ручная правка реестра
Пункт меню добавляется за три шага.
- Перейдите в раздел реестра
HKEY_CLASSES_ROOT\*\shell
Пункт меню, добавленный в этот раздел, отобразится для любого файла у всех пользователей.
- Создайте подраздел с любым именем, например, Editor, а в нем создайте строковые параметры:
- Параметр MUIVerb (обязательный) отвечает за название пункта меню, поэтому значение можете выбирать любое. Я назвал свое Открыть в Блокноте.
- Параметр Icon (необязательный) задает значок для пункта меню. Можно задать путь к библиотеке (dll) и номер ресурса (значка), либо полный путь к исполняемому файлу (если он в системной папке, достаточно указать только имя). Для своего пункта я задал стандартный значок notepad.exe.
- Параметр Position (необязательный) отвечает за расположение пункта в контекстном меню. Вы можете задать ему значение Top (самый первый пункт меню) или Bottom (внизу меню). Если значение не задавать, пункт окажется в верхней части меню, после стандартных пунктов «Открыть», «Печать» и т.д.
- Параметр Extended (необязательный) отвечает за отображение пункта в меню. Когда параметр присутствует, чтобы увидеть созданный пункт, нужно вызывать контекстное меню, удерживая нажатой клавишей SHIFT. Этому параметру не требуются значения.
- В разделе Editor создайте подраздел command, а в нем дважды щелкните параметр (По умолчанию) и задайте значение
notepad.exe %1
Если вы прописываете сторонний редактор, укажите полный путь к нему. Например:
C:\Program Files\Notepad++\notepad++.exe %1
В реестре это выглядит примерно так:
REG-файл
Вы можете импортировать приведенный ниже REG-файл, предварительно внеся в него необходимые правки.
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\Editor] "MUIVerb"="Открыть в Блокноте" "Icon"="notepad.exe" ;"Position"="Bottom" ;"Extended"="" [HKEY_CLASSES_ROOT\*\shell\Editor\command] ;Блокнот @="notepad.exe %1" ;Notepad++ ; @="C:\\Program Files\\Notepad++\\notepad++.exe %1"
Обратите внимание, что в пути к приложению используются двойные слэши.
Результат
Все готово! В контекстном меню появился пункт Открыть в Блокноте, и он отображается для всех файлов.
Трюк с добавлением пункта в контекстное меню файлов, конечно, не новый. С некоторыми вариациями он работает и в Windows XP, где названием пункта меню служит имя раздела реестра, а значки не поддерживаются.
Несуществующий раздел реестра
А вы знаете, что мы внесли изменения в несуществующий раздел реестра? Раздел HKEY_CLASSES_ROOT (HKCR) интересен тем, что он отсутствует физически. Под его видом в редакторе реестра отображаются совмещенные разделы:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes HKEY_CURRENT_USER\SOFTWARE\Classes
В HKLM хранятся глобальные параметры для всех пользователей, а в HKCU – параметры текущего пользователя, при этом HKCU преобладает над HKLM. Поэтому разные пользователи могут сопоставлять различные программы одному типу файла. Это дает возможность каждому из них слушать музыку в любимом проигрывателе и путешествовать по Интернету в привычном браузере.
Если вы хотите создать пункт меню только для своей учетной записи, вносите изменения в раздел HKEY_CURRENT_USER\SOFTWARE\Classes.
Разработчики Windows позиционируют раздел HKCR для чтения, нежели для записи. Это не значит, что записывать туда данные неправильно. Когда вы вносите изменения в раздел HKCR, они записываются в HKEY_LOCAL_MACHINE\SOFTWARE\Classes. Это легко проверить – удалите созданный раздел Editor из HKLM, и он пропадет из HKCR.
Через пару дней я покажу, как разными способами создать в контекстном меню аналогичный пункт для открытия файла в программе с правами администратора. Я также рассмотрю вопрос одновременного открытия нескольких файлов в программах, использующих вкладки для их отображения.
А у вас текстовый редактор интегрирован в контекстное меню? Какой редактор вы предпочитаете и почему?
animert
пользуюсь notapad++, так как есть подсветка синтаксиса и можно переключать кодировки
интересно было бы узнать как его запустить с правами админа, так как есть меню запуск
mPaSoft
Пользуюсь AkelPad’ом. php-файлы ассоциирую с ним сразу при установке. А в hosts можно и из консоли открытой от админа запись сделать.
Василий
А как быть, если нужно чтобы такое действие распостранялось только на определенные типы файлов? Допустим чтобы при клике на изображение появляллся пункт меню с возможностью открытия в том редакторе который я пропишу.
Vadim Sterkin
mPaSoft, о полных правах через пару дней. А что значит
mPaSoft, PHP на скриншоте — это лишь один из примеров. Существуют всякие файлы с необычными расширениями.
Василий, универсального рецепта нет, если тип файла уже ассоциирован с неким редактором. Но в общем случае подход такой.
Идете в HKEY_CLASSES_ROOT\.ext. Например:
Смотрите там значение для параметра по умолчанию. Там указывается «длинное расширение», в данном примере это CSSFile.
Идете в
и создаете там подраздел shell. Дальше по тексту статьи, со второго шага.
ив
Предпочитаю «велосипед» FileMenu Tools (удобно, бесплатно, прекрасно интегрируется и есть возможность добавления и редактирования по свему усмотрению множества пунктов, которые, ктати, можно разбить на разделы в каскадном меню). В него добавляю при настройке и Notepad++ и AkelPad и Shtirlitz (иногда бывает пригождается), ну, и естественно, свои пункты для работы с файлами.
Андрей
Спасибо за наглядность.У меня к вам просьба.Когда вы иногда советуете разные утилиты, можете указывать для какой версии ОС 32-разрядной или для 64-х разрядной.До свиданья.
Vadim Sterkin
ив, FileMenu — это полноценное расширение оболочки. Конечно, у него больше возможностей :)
Андрей, я в этой записи никаких утилит не советовал. Да и суть вашей просьбы не слишком понятна, ибо 32-разрядные программы нормально работают в 64-разрядной среде.
Фёдор
А мне больше нужно быстрое редактирование в Диспетчере рисунков Microsoft Office, там обрезать картинки удобнее.
Спасибо за интересную статью, жду продолжение с Административным доступом. :)
Даниил
Спасибо за статью Вадим.
О редакторах:
Чаще всего пользуюсь Блокнот-ом, реже использую Wordpad. Они же и интегрированы в контекстное меню, т. е. контекстное меню без изменений — на данный момент оно меня полностью устраивает, так же как и Блокнот.
Для редактирования контекстного меню кроме FileMenu Tools можно воспользоватся возможностями различных программ-твикеров, коих великое множество, но сделать это в реестре системы своими руками куда нагляднее и познавательнее.
О файлах:
На пример файлы настроек Total Commander.
При установке Total Commander из оригинального дистрибутива в отдельную папку в корне ж. диска с сохранением файлов его настроек в папку установки, а не в папку Programm Files как это делают различные сборки, проблем с редактированием этих файлов, в случае необходимости, не возникает вообще и редактируются они любым текстовым редактором.
Меню «Запуск» Total Commandera о котором шла речь в комментариях, на склько я понял, не позволяет запускать программы с правами Администратора. Это можно сделать в свойствах файла программы установив соответствующую галку, но тогда программа будет запускаться с повышенными правами всегда, не только из Тотал-а, что не всегда нужно.
Vadim Sterkin
Фёдор, тогда вам нужно прописать путь к OIS.exe, который в лежит в папке с установленным Office. Но запуск с полными правами ему вряд ли нужен :)
Даниил, раз вы обходитесь блокнотом, вам, видимо, редко приходится ковыряться в коде. Хотя я знаю людей, которые статьи в HTML пишут прямо в блокноте.
Что касается Total Commander, то его необязательно устанавливать в корень диска, да и неправильно это при нескольких пользователях. Правильнее выбирать опцию установки с хранением настроек в профиле, и тогда у каждого будут свои параметры в %APPDATA%.
Фёдор
Уже сделано. :)
И еще вопрос. У меня имеется вторя уч. запись с административными правами, мне ее пришлось таковой сделать, так как при обычном типе не отображается меню Открыть с помощью в контекстном меню. Если вернуть этой учетной записи Обычный тип, твик реестра будет работать?
Vadim Sterkin
Фёдор, данный твик работает для всех типов учетных записей. Однако я не уверен, что ваша проблема связана с правами.
В моем понимании пункт «Открыть с помощью» не отображается, если типу файлов не сопоставлена ни одна программа. Переименуйте файл а.txt в a.xt и вы увидите, что пункт пропал. Откройте файл двойным щелчком и сопоставьте его с блокнотом в диалоге выбора программы — пункт появится.
Фёдор
А Вы попробуйте, создайте простую уч. запись в Windows 7, и щелкните правой кнопкой, допустим, на изображении. Пункта «Открыть с помощью» не будет! (а сначала я сам попробую XD).
Сергей Ткаченко
В свое время я писал статью, в которой я предлагал для этих целей использовать Nircmd. Посмотрим, что предложит Вадим.
Notepad++
Потому что быстрый, с подсветкой синтаксиса, со сворачиванием блоков кода, очень гибко настраиваемый и бесплатный.
Фёдор
Только что сходил, проверил… Пункт присутствует! Даже странно как-то, я создавал как-то профиль, там пункт отсутствовал (UAC отключен был всегда), пришлось человеку делать администратора… Странно как-то.
Ладно, это переживём. :) Извините за флуд в комментариях!
Vadim Sterkin
Сергей Ткаченко, я не открою Америку, но покажу еще пару способов, причем один без сторонних утилит.
Виталий
В ХР значки добавить можно через регистрацию специальной библиотеки или что- то типа того. Другие же программы отображают свои значки, значит, это можно сделать самому..
Vadim Sterkin
Виталий, так расскажите, как это сделать :) В XP вам нужно писать расширение для оболочки, для чего нужно владеть навыками программирования.
Описанное решение в Windows 7 ограничивается правкой реестра — это может сделать любой человек, не обладающий глубокими знаниями. Видите, как удобно пересонализировать 7? :)
Виталий
Так я ж точно и не знаю. Думаю, если кто-нибуть владеет навыками программирования, то он может написать программку, которая будет делать всё сама.
Конкретно в этом отношении да, проще. А вот перестановка элементов в панели инструментов сложнее, так что в принципе сложность одинакова.
Vadim Sterkin
Это уже полный оффтоп… К тому же, непонятно, что вы имеете в виду? На всякий случай, я уже рассказывал, как быстро найти любой элемент панели управления.
Поверьте, вам будет очень трудно ходить по всем моим записям и доказывать, что ХР лучше :)
Виталий
В смысле где кнопки «Назад» «Вперёд» в ХР «Упорядочить» «Подключить сетевой диск» «Новая папка» в 7 и тому подобные.
Да я ничего не доказываю, я лишь представляю объективную информацию. Но не беспокойтесь, скоро мне это надоест.
Nick
А на кнопку пуск можно это сделать? Где в реестре искать?
Vadim Sterkin
Это возможно, но думаю, что нужно написать специальное расширение для оболочки. В реестре я способа не нашел.
veski
Вадим ,а у вас нет готовых решений по редактивованию встроенных подменю конкретной программы (скажем,например как у вас здесь на рисунке для программы 7-zip),а у меня закавыка с встоенным меню программы ultraISO.Буду рад подсказке или статье
Vadim Sterkin
Сторонние программы реализуют программные расширения оболочки. В реестре вы это не исправите, разве что отключите целиком.
veski
Да это я уж понял.Своих познаний в этом деле нехватает .Весь контекст в подгружаемой библиотеке dll сам файл защищен цифровой подписью,ищу способы и инструменты(готовые утилиты) для редактирования этого файла,хотя есть конечно целый набор программ подходящего функционала.Все это нужно не просто для отключения или удаления встроенного контекста.а именно для изменения (редактирования) и перевода текста меню на иной язык.Vadim Sterkin,
Vadim Sterkin
Вместо того, чтобы править ресурсы без разрешения, вам лучше связаться с автором и предложить перевод.
P.S. Пожалуйста, ставьте пробелы после знаков препинания. В принципе, о блокировании комментариев, подобных вашему, написано под формой отправки комментария.
Виталий
Тогда бесполезно. Проще с нуля написать. Программы не помогут.
veski
Спасибо, Вы меня натолкнули на дельную идею.
Константин
Здравствуйте, Вадим. Может Вы мне сможете помочь? После переустановки Windows (XP сменил на 7) один файл Word перестал открываться. Word пишет: «приложению WORD не удается открыть документ, так как пользователь не обладает достаточными правами». Моя учетная запись — администраторская. В свойствах этого файла стоит метка «шифровать содержимое для защиты данных», но перед переустановкой Windows он зашифрован не был!!! Пробовал создать новый сертификат. В свойствах файла мне открыт полный доступ, но файл попрежнему не открывается. Его как-нибудь можно открыть?
Vadim Sterkin
Константин, не вижу никакой связи с этой записью. Вам сюда.
Марат
http://hkar.ru/mJ8g
Vadim Sterkin
Марат, а что непонятно? В статье же написано — создайте. Читайте инструкции…
Evgeny Boykov
Спасибище вот такенное! По этой инструкции сделал пункт меню «Открыть в CorelDraw», всё работает! Кайф! Ещё б горячую кнопку для этого счастья сделать ))
Vadim Sterkin
Пожалуйста. Какую горячую кнопку, где и в какой ОС?