|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Shell Ace - библиотека для создания расширений оболочки Windows
Прошу сообщество потестирвать мою библиотеку Shell Ace. Как сказано в описании темы, библиотека позволяет создавать в среде разработки Delphi расширения оболочки Windows. Поддерживаются версии Delphi начиная с 7 и заканчивая XE4. В библиотеку входит расширение IDE, которое интегрируется в окно, появляющееся при выборе команды File/New/Other, оно позволяет создавать каркасы расширений.
Для создания нового расширения нужно выбрать на вкладке Windows Shell Extension значек Windows Shell Extension, это приведет к созданию нового проекта расширения. После этого нужно выбрать на той же вкладке необходимый обработчик, например Context menu handler Появится диалог создания обработчика: Можно выбрать имя класса и дополнительные методы обработчика, которые будут прописаны в коде. После нажатия на кнопку OK в проект будет добавлен новый модуль. Если при этом была отмечена опция Create sample, то в код модуля будет прописан образец обработки информации. Процесс разработки расширения сводится к перекрытию различных методов базового класса расширения, в перекрытых методах реализуется нужная функциональность. После написания расширения его нужно регистрировать стандартным образом с помощью утилиты regsvr32.exe из состава Windows. Регистрацию можно произвести и с помощью расширения оболочки RegExtension, входящим в состав Shell Ace. После его регистрации в системе при вызове (с нажатой клавишей Shift) контекстного меню dll-файлов в них можно увидеть две дополнительные команды: В системах начиная с Windows Vista RegExtension сама запросит при необходимости повышение привилегий, необходимых для регистрации расширения оболочки. Библиотека написана с учетом специфики последних версий Windows (например, реализована поддержка методов инициализации IInitilizateWith*, реализована работа с 32-ми иконками в контекстных меню и т.д.). Скачать библиотеку можно по ссылке http://shellace.com/ShellAceSetup.exe. Исполняемый файл является установщиком, он сам пропишет все пути в Delphi и зарегистрирует расширение IDE. К сожалению, полноценная справка еще не готова. Но я с удовольствием отвечу на любые вопросы и приму любые пожелания. |
Этот пользователь сказал Спасибо Aniskin за это полезное сообщение: | ||
M.A.D.M.A.N. (30.06.2013)
|
#2
|
|||
|
|||
Можно пример поподробней для ContextMenu, например регистрация для рашрирения .exe
|
#3
|
|||
|
|||
Цитата:
Та версия библиотеки, которая выложена на сайте, устарела. Сегодня вечером выложу обновленную версию. Сначала прочитайте небольшой мануал по созданию расширений оболочки ContextMenu. Конкретно для exe файлов нужно в методе FillProgIDList добавлять в список строку ".exe" или "exefile". Остальное смотрите в генерируемом библиотекой примере. Если будут еще вопросы - задавайте. Цитата:
Последний раз редактировалось M.A.D.M.A.N., 24.07.2013 в 14:59. Причина: Мерж |
Этот пользователь сказал Спасибо Aniskin за это полезное сообщение: | ||
Zorkov Igor (24.07.2013)
|
#4
|
|||
|
|||
Цитата:
Отпишитесь здесь плз когда выложите, помучаю вечером Спасибо |
#5
|
|||
|
|||
Цитата:
|
Этот пользователь сказал Спасибо Aniskin за это полезное сообщение: | ||
Zorkov Igor (24.07.2013)
|
#6
|
|||
|
|||
Шикарно вообще
Радует инсталер Все получилось с контекст меню, регистрирую DLL как то так Код:
const CLSID_ContextMenu = '{BBAB3AF5-43D9-4C12-BC92-32CF83868822}'; function RegExt(FileName: String): Boolean; var Reg: TRegistry; begin try Result := False; Reg := TRegistry.Create; try with Reg do begin RootKey := HKEY_CLASSES_ROOT; OpenKey('\CLSID\' + CLSID_ContextMenu, True); WriteString('', 'File Unlocker'); OpenKey('\CLSID\' + CLSID_ContextMenu + '\InProcServer32', True); WriteString('', FileName); WriteString('ThreadingModel', 'Apartment'); Result := OpenKey('\*\shellex\ContextMenuHandlers\' + CLSID_ContextMenu, True); if Result then begin WriteString('', CLSID_ContextMenu); Result := OpenKey('\folder\shellex\ContextMenuHandlers\' + CLSID_ContextMenu, True); WriteString('', CLSID_ContextMenu); end; Result := OpenKey('\lnkfile\shellex\ContextMenuHandlers\' + CLSID_ContextMenu, True); WriteString('', CLSID_ContextMenu); end; finally Reg.Free; end; except end; end; function UnRegExt(FileName: String): Boolean; var Reg: TRegistry; begin try Result := False; Reg := TRegistry.Create; try with Reg do begin RootKey := HKEY_CLASSES_ROOT; Result := DeleteKey('\*\shellex\ContextMenuHandlers\' + CLSID_ContextMenu); if Result then begin Result := DeleteKey('\folder\shellex\ContextMenuHandlers\' + CLSID_ContextMenu); end; Result := DeleteKey('\lnkfile\shellex\ContextMenuHandlers\' + CLSID_ContextMenu); end; finally Reg.Free; end; except end; end; Буду теперь доводить до ума File Unlocker, здесь пользовал ShellPlus, но он шибко глючный сволочь |
#7
|
|||
|
|||
Цитата:
Код:
class function TContextMenuExtension1.GetDescription: UnicodeString; begin Result := 'File Unlocker'; end; procedure TContextMenuExtension1.FillProgIDList(AList: TStrings); begin AList.Add('*'); AList.Add('folder'); AList.Add('lnkfile'); end; Цитата:
|
#8
|
|||
|
|||
Цитата:
|
#9
|
|||
|
|||
Цитата:
Но при этом надо вызывать regsvr32.exe так? Мне проще из своей программы в реестр записать |
#10
|
|||
|
|||
Цитата:
|
#11
|
|||
|
|||
У меня наблюдается такая бабуйня при регистрации на линки
26-07-2013 12-06-54.jpg То есть два моих пункта меню Это как то правится? |
#12
|
|||
|
|||
Цитата:
Предполагаю, что проблема в том, что ты регистрируешь на "*" и на "lnkfile" одновременно. Хотя "*" уже включает в себя "lnkfile". Если код обработки для "*" и "lnkfile" один, то либо убери "*", либо убери "lnkfile". Если разный, то нужно создавать два обработчика Context menu в рамках одной dll. А желтый цвет - это рисует система или ты? |
#13
|
|||
|
|||
Это похоже при AList.Add('*') и AList.Add('lnkfile') одновременно
Все вкурил делаю только AList.Add('*') и AList.Add('folder') регестрирую через regsvc32, так проще Опередил ты меня ответом, это я выделил желтым что бы показать просто Последний раз редактировалось M.A.D.M.A.N., 06.08.2013 в 23:51. |
#14
|
|||
|
|||
Исправил пару ошибок в библиотеке и добавил иконки (см. первое сообщение темы).
|
Этот пользователь сказал Спасибо Aniskin за это полезное сообщение: | ||
Zorkov Igor (08.08.2013)
|