MPR Plugin API =========================== Дает возможность добавлять новые модули к MPR. Для реализации плагина необходимо: 1. Получить инклуды для нужного языка из .tlb файла (для Delphi и VC++ уже есть сгенерированные) 2. Создать COM объект реализующий методы интерфейса IMPRPlugin 3. Зарегистрировать COM объект (regsvr32.exe Component.dll) 4. Указать, что созданный объект принадлежит категории {9BCF3212-3D97-4344-9A41-B41AC1E98E5F} (см. примеры) 5. Перезапустить MPR Почему именно COM? 1. Стандартный API для всех языков программирования, поддерживающих COM 2. Плагины просты в реализации (на Delphi ~200 строк) 3. Плагины могут находиться где угодно, включая .exe файлы и другие компьютеры 4. В одном .dll файле может быть несколько плагинов (компонентов) Информация об интерфейсах =========================== IMPRWorker является вспомогательным интерфейсом, и предоставляет следущие методы: Функции для построения отчета. IconAssign ---------- Добавить картинку во внутренний ImageList. Параметры: IconName - название иконки (должно быть уникальным) Handle - HBITMAP Masked - TRUE если эта картинка имеет маску (прозрачный цвет) MaskColor - если Masked был указан TRUE, тогда этот цвет будет считаться прозрачным, если указать -2, то прозрачным цветом будет считаться цвет левого верхнего пикселя, в других случаях этот аргумент игнорируется OutIndex - присвоенный индекс картинки, используется в функции AddNode, при ошибке равен -1 IconIndex --------- Получить индекс иконки по ее названию, вернет -1 если такой иконки в нет. MoveIn --------- Войти в последнюю добавленную папку (в дереве). MoveOut --------- Выйти из текущей папки. Expand --------- Ракрыть текущую папку. AddNode --------- Добавить новую запись в дерево. Параметры: ItemName - название записи Data - данные, которые будут отображаться в отчете как HTML (правый frame программы), при клике на эту запись IconIndex - индекс иконки, укажите -1 если иконки нет AddNodeFolder ------------- Аналогично AddNode, только автоматически присваивается иконка папки. Другие функции. LoadLangFile ------------ Пока не реализовано. LangID ------ Получить LangID, выбранный юзером (указан в .lang файле), например, 25 для LANG_RUSSIAN. WriteLog -------- Добавить запись в лог. HTMLSafe -------- Преобразовать небезопасные символы в HTML код. IsRegistered ------------ Вернет TRUE если программа зарегистрированна. IMPRPlugin - этот интерфейс необходимо реализовать. ModuleName ---------- в Value следует записать имя модуля Get_ModuleSubclass ------------------ Необходимо вернуть класс текущего модуля, см. константы Subclass_XXXX В зависимости от класса модуль будет добавлен в ту или иную ветвь дерева. Через операцию OR можно указать несколько классов. Get_ModuleAbout --------------- в Value следует записать информацию о модуле (автор, заметки, и тд), пока эта инфа нигде не отображается. Get_ModuleIcon --------------- Следует вернуть индекс иконки модуля, или -1 если ее нет. См. функции IconAssign/IconIndex. Get_ModuleVersion ----------------- Вернуть версию модуля (Major.Minor). Старший DWORD - Major, младший DWORD - Minor. Get_IsEmpty ----------- Вернуть TRUE если модуль не содержит информации (паролей). Subclass - для конкретно какого класса необходимо проверить содержится ли в нем информация, если Subclass = 0, тогда проверить для всех реализованных классов. Collect ------- При вызове этого метода необходимо собрать всю необходимую информацию о паролях. AsText ------ Вернуть пароли в текстовом виде. AsTree ------ При вызове этого метода необходимо построить дерево отчета. ExportData ---------- Экспортировать данные (сохранить) в IStream. ImportData ---------- Импортировать данные (загрузить) из IStream. В созданном объекте всегда будет вызываться или ImportData или CollectData, но никогда вместе. Если не реализован один из (или несколько) методов ExportData, ImportData, AsText, AsTree или Collect, то можно вернуть E_NOTIMPL, это допустимо и не будет считаться ошибкой обработки модуля.