![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Прошу сообщество потестирвать мою библиотеку 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;Цитата:
Я тоже пытался одно время использовать ShellPlus, даже купил себе эту либу, но очень она мне не понравилась, так, что проще было написать самому с нуля Вот и написал. |
|
#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)
| ||