ForummanЦитата: Очень хочу разобраться с добавлением иконки в это контекстное меню вручную.
Нужно понимать, что пункты в контекстных меню (КМ) бывают разные – в зависимости от объекта. Например, содержимое КМ файла *.doc, папки, файла *.inf или ярлыка, будут разными. Бывают и такие пункты, которые есть в любом КМ, в независимости от объекта для которого КМ вызывалось.
[more=Пример создания такого элемента]
Windows Registry Editor Version 5.00
;
; Создание ветки shell, для пункта меню, которое будет при любом объекте
;
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell]
;
; Задание имени пункта меню
;
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\NoteTab Pro (*)]
@="NoteTab Pro"
;
; Задание комманды, которая будет выполнятся при выборе пункта меню
;
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell\NoteTab Pro (*)\command]
@="C:\\Program Files\\NoteTab Pro 6\\NotePro.exe \"%1\""[/more]
Ключи реестра, отвечающие за КМ разных объектов, описаны здесь:
FAQ по WinXP > Интерфейс Для Win7 создание пункта в КМ ещё проще:
Добавляем собственные команды в КМ / Хабрахабр Обратите внимание, что пункт меню создать посредством реестра можно, а прикрутить иконку нельзя.
Нет такой возможности и ключа, чтобы указав путь к файлу иконки, она тут же отобразилась в КМ объекта.
Посмотрите на архиватор WinRAR - у него интеграция иконки в КМ делается через dll библиотеку, которая регистрируется в системе. Стоит снять регистрацию этой библиотеки (убрать в настройках галочку «Встроить WinRAR в оболочку ОС») и иконки, как и само меню, исчезнет.
Если разработчики программы решили добавлять в контекстное меню пункт своей программы, то для этого дела отдельно пишется специальное расширение меню оболочки (dll файлик). Но это не значит, что в этом файле будут иконки. Их там нет - они в другом месте, которое определил программист, зачастую это *.exe который лежит рядом. Т.е., если была идея переделать существующее расширение оболочки «под себя», заменив иконку в ресурсах dll – этого не получится.
[more=Вот маленький кусочек того, что пишет WinRAR в реестр при включении интеграции в ОС]Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shellex\ContextMenuHandlers\WinRAR]
@="{B41DB860-8EE4-11D2-9906-E49FADC173CA}"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{B41DB860-8EE4-11D2-9906-E49FADC173CA}]
@="WinRAR"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{B41DB860-8EE4-11D2-9906-E49FADC173CA}\InProcServer32]
@="P:\\WinRAR\\rarext.dll" "ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shellex\ContextMenuHandlers\WinRAR]
@="{B41DB860-8EE4-11D2-9906-E49FADC173CA}"
...[/more] (чтобы посмотреть полностью, сравните снимки реестра утилитой
Regshot до и после установки галочки).
Обратите внимание на выделенное красным. Видите dll?
О том, как написать подобное расширение самому написано здесь:
The Complete Idiot's Guide to Writing Shell Extensions - CodeProject Итак, откуда берутся иконки разобрались (dll файл регистрируется в системе и выполняет роль расширения оболочки). Посмотреть все расширения оболочки можно в
ShellExView.
Теперь вернусь к вашему вопросу о том, как самому добавить иконки к пунктам меню. Выхода два: писать расширение самому или пользоваться специальной программкой для редактирования КМ.
Несколько минут назад случайно наткнулся на такую программу.
Fast Explorer 2008 - бесплатная программа для настройки контекстного меню Windows.
Эта программа имеет свою dll расширения оболочки. КМ теперь можно настраивать как вам захочется и иконки менять тоже по вкусу. Описание по работе см. на странице по ссылке на программу.