Форум: "Прочее";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизИнтеграця в проводник (во всплывающее меню) Найти похожие ветки
← →
Piter © (2006-03-04 17:56) [0]У кого-нибудь есть опыт интегрирования своих пунктов меню во всплывающее меню проводника над файлами?
Сижу, разбираюсь... Надо же было так навертеть...
Понятно, что ковырять надо HKEY_CLASSES_ROOT.
С папками просто, создаешь нужный ключ:
Directory\shell\[Название]\command
В [Название] по умолчанию пишешь имя, которое будет отображаться, в Command по умолчанию путь до exe, все просто и хорошо.
А вот с файлами трындец :(
Непосредственно в расширениях (например, .arj) можно провернуть способ с папками, но до тех славных пор, пока кто-нибудь не возьмет расширение по умолчанию себе. Вообще тупость, зря позволили расширения на другие ключи ссылать.
Ладно, допустим мне нужно "встроиться" в расширение .arj, по умолчанию его берет WinRar
Значит мне надо лезть в ключ WinRar... Можно там создать shell\bla-bla\command - но на ключ WinRar, например, еще и расширение bz2 зарегистрировано. А мне то надо появляться только у arj.
Никакого другого способа, кроме этого COM не вижу. И с этим самая главная проблема. Есть у кого маленькая, демонстрационная DLL"ка совместимая с explorer-расширениями?
Я вот нашел в: Borland\Delphi7\Demos\ActiveX\ShellExt примерчик: contmenu.dpr
Вроде все отлично, скомпилил. Но не работает!
Порядок действия таков:
1) в ключе WinRar прописал:
shellex\contmenu\ - по умолчанию: {EBDF1F20-C829-11D1-8233-0020AF3E97A9} (это в примере contmenu.dpr такой используется)
Создал в \CLSID ключ с тем же GUID
Внутри ключ: InprocServer32 и по умолчанию путь до библиотеки скомпиленной
Еще на всякий случай параметр ThreadingModel со значением: Apartment
Но не работает! Что может быть не так?
Пример DLL может в Delphi корявый или я не так использую? Не понимать...
← →
Экспериментатор (2006-03-04 19:35) [1]Если встроить отдельный пункт - Могу помочь.
Как-то делал много таких вещей.
В конкретном случае пока не знаю - не вник
Пиши galera@narod.ru
спам не приветствуется, в смысле вообще не приходит
Ну и только с серьезными намерениями :-)
← →
Piter © (2006-03-04 20:27) [2]ну давай уж сюда, зачем мылом
← →
DiamondShark © (2006-03-05 00:26) [3]
> Порядок действия таков:
а командаregsvr32 contmenu.dll
не помогает?
Порядок действий, вообще-то, неполный.
Полный -- в ContextM.pas
TContextMenuFactory.UpdateRegistry
> А мне то надо появляться только у arj.
В IShellExtInit.Initialize проверять, для каких файлов вызвано, и возвращать E_FAIL если тип файла не тот, что надо.
← →
DiamondShark © (2006-03-05 00:33) [4]
> но до тех славных пор, пока кто-нибудь не возьмет расширение
> по умолчанию себе.
На этот случай есть HKEY_CLASSES_ROOT\*
← →
Piter © (2006-03-05 01:01) [5]DiamondShark © (05.03.06 0:26) [3]
угу, разобрался. Дело было в том, что не добавлял в Approved (в NT надо).
DiamondShark © (05.03.06 0:26) [3]
В IShellExtInit.Initialize проверять, для каких файлов вызвано
угу, тоже разобрался уже. Собственно, в примере код написан для вызова одного файла, не заметил этого FFileName.
DiamondShark © (05.03.06 0:26) [3]
и возвращать E_FAIL если тип файла не тот, что
понял уже...
DiamondShark © (05.03.06 0:33) [4]
На этот случай есть HKEY_CLASSES_ROOT\*
да, но что будет если туда каждый станет запись добавлять?
Вообще, глупо MS сделали на мой взгляд. Не надо было разрешать обработку расширения на другой ключ переносить. Или пусть бы переносились, но Shell и ShellEx и самого расширения не игнорировались бы...
Кстати, интересно. А что будет если я и в "*" пропишу свой GUID, и в ".arj"? Два раза будет вызываться?
P.S. Теперь появилась еще одна проблема: http://delphimaster.net/view/1-1141505242/
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.052 c