Добавление команды в Plugin API

Все что касается разработки, отладки, использования подключаемых модулей.

Moderators: Korney San, marcipan

RIV
Posts: 1
Joined: 17 Nov 2006, 12:58 Fri

Добавление команды в Plugin API

Post by RIV »

Разрабатываю плагин для ДМ под свои нужды. Столкнулся с проблемой.
Нужна команда "УДАЛИТЬ ЗАКАЧКУ ИЗ СПИСКА". Я думаю ее не сложно организовать. В качестве параметра нужно передавать ID закачки.
ZETZET
Бывалый
Posts: 11
Joined: 27 May 2007, 3:57 Sun

Post by ZETZET »

Просмотрев исходники и доки официального плагина-примера, не обнаружил даже упоминания на такую возможность :shock:
Странно и удивительно.

Ну, а раз так обстоят дела, то юзай

Code: Select all

keybd_event (VK_DELETE, 0, KEYEVENTF_EXTENDEDKEY, 0);
                      keybd_event (VK_DELETE, 0, KEYEVENTF_KEYUP or KEYEVENTF_EXTENDEDKEY, 0);
[/code]
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

ZETZET wrote:Просмотрев исходники и доки официального плагина-примера, не обнаружил даже упоминания на такую возможность :shock:
Странно и удивительно.
Вопли о том, что "странно и удивительно", раздаются уже года два. А воз и ныне там. :evil:
При помощи специально написанного плагина было опробовано пару вариантов команд, не указанных в readme. Результат нулевой.
ZETZET wrote: Ну, а раз так обстоят дела, то юзай

Code: Select all

keybd_event (VK_DELETE, 0, KEYEVENTF_EXTENDEDKEY, 0);
                      keybd_event (VK_DELETE, 0, KEYEVENTF_KEYUP or KEYEVENTF_EXTENDEDKEY, 0);
Уважаемый также может показать работающий код, который по ID закачки выделит её курсором в списке закачек в главном окне, чтобы могло сработать keybd_event? :?:
Ну а кнопку ОК потом нажать - плёвое дело...
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
ZETZET
Бывалый
Posts: 11
Joined: 27 May 2007, 3:57 Sun

Post by ZETZET »

Ну, мне видится такой алгоритм:
1. через GetDownloadInfoByID получаем инфу о нужной закачке.
2. занимаем память в процессе ДМ через VirtualAllocEx
3. ListView_GetItemCount получаем общее количество закачек
4. делаем цикл по всем закачкам, используя ListView_GetColumn, ListView_GetItem, ReadProcessMemory, WriteProcessMemory. Сравнивая имя\папку\описание\и\или другую инфу в разных колонках, находим нашу закачку(ее индекс в списке)
5. получаем область выделения найденной закачки через LVM_GETITEMRECT
5.1 через ListView_EnsureVisible показываем элемент в списке целиком
6. эмулируем щелчок мышкой по этой области через WM_LBUTTONDOWN, WM_LBUTTONUP
7. эмулируем нажатие на Делете через keybd_event
8. все. закачка в корзине
все это делаем испльзуюя занятую память в ДМ.
для исключения моргания можно использовать WM_SETREDRAW
Ну, как то так. Кто попробует? :)

пс. Впечатление что до разрабов не доходят пожелиня плагинописателей\юзеров.
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

ZETZET wrote:Ну, мне видится такой алгоритм:
...
7. эмулируем нажатие на Делете через keybd_event
8. Ловим хэндл окна подтверждения
9. Ищем хэндл кнопки ОК
10. "Нажимаем" кнопку через SendMessage.
Вот как-то так.
И ещё грабли - не факт, что в данный конкретный момент открыта категория "Все закачки"... :twisted:
ZETZET wrote:пс. Впечатление что до разрабов не доходят пожелиня плагинописателей\юзеров.
Ты открыл такую страшно ужасную тайну!.. :twisted:
Попробуй выловить онлайн аську, указанную как "поддержка"...
У меня иногда возникают сомнения, что разработчики вообще читают этот форум хотя бы иногда... это если не считать Slavko...
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
ZETZET
Бывалый
Posts: 11
Joined: 27 May 2007, 3:57 Sun

Post by ZETZET »

И ещё грабли - не факт, что в данный конкретный момент открыта категория "Все закачки"...
Ну, если продолжить извращаться, то можно найти в дереве нужную категорию, эмулировать клик по ней. А проделав нужную работу с открывшимся списком, также кликом же вернуться на предыдущую категорию. Вернув в исходное состояние прокрутку дерева, списка, верхние(бывшие)\выделенные элементы. При этом выключив прорисовку, чтобы небыло заметно.
Но, конечно же, это неудобно и страшное извращение.

пс. Да, тяжело нашему брату плагинописателю в наше время... :D Никаких нормальных условий для работы... :D
ZETZET
Бывалый
Posts: 11
Joined: 27 May 2007, 3:57 Sun

Post by ZETZET »

Korney San
У меня иногда возникают сомнения, что разработчики вообще читают этот форум хотя бы иногда... это если не считать Slavko...

Возможно разрабы ВООБЩЕ не читают форум(ы). Возможно, эта работа поручена\делает уважаемый Slavko.
И особенно интересные\проблемные(по его субьективному(?) мнению) вопросы по ДМ\плагинам, не\попадают к разрабам.
Такая вот, версия происходящего...
А может я напрасно тещу себя надеждой?
В общем странная ситуация....
Официальный пример плагина 2(?) годичной давности... Чем они(разрабы) занимаются? Версии ДМ вроде выходят исправно...(тьфу...тьфу)
Alex Qwerty
Гуру
Posts: 175
Joined: 16 Jun 2007, 8:56 Sat

Post by Alex Qwerty »

ZETZET wrote:Korney San
У меня иногда возникают сомнения, что разработчики вообще читают этот форум хотя бы иногда... это если не считать Slavko...

Возможно разрабы ВООБЩЕ не читают форум(ы).
Возможно ДМ - "дикая" программа, самозародившаяся в глубинах интернетов, и у нее нет никаких создателей. Возможно те редчайшие "письма разработчиков", которые можно увидеть на форуме, - это эксперименты искусственного интеллекта многочисленных копий ДМ, интегрированных в браузеры; это предположение, кстати, хорошо объясняет молчание "разработчиков" в мыле и в аське (плагин для аськи не входит в дистрибутив, его ставят относительно редко и можно спалиться).
Возможно, эта работа поручена\делает уважаемый Slavko.
Возможно он хотя бы раз в год просматривает личку, но письмо, валяющееся в "исходящих" с февраля не обнадеживает...

Возможно ты уже понял, что пользуясь ДМ ты не можешь ждать милостей от природы разработчиков? :lol: :evil:
XPProSP2, DM 5.6.1.1187, Opera 10.10.1893, oGet
ZETZET
Бывалый
Posts: 11
Joined: 27 May 2007, 3:57 Sun

Post by ZETZET »

Alex Qwerty wrote:
ZETZET wrote:Korney San
У меня иногда возникают сомнения, что разработчики вообще читают этот форум хотя бы иногда... это если не считать Slavko...

Возможно разрабы ВООБЩЕ не читают форум(ы).
Возможно ДМ - "дикая" программа, самозародившаяся в глубинах интернетов, и у нее нет никаких создателей. Возможно те редчайшие "письма разработчиков", которые можно увидеть на форуме, - это эксперименты искусственного интелекта многочисленных копий ДМ, интегрированных в браузеры; это предположение, кстати, хорошо объясняет молчание "разработчиков" в мыле и в аське (плагин для аськи не входит в дистрибутив, его ставят относительно редко и можно спалиться).
Возможно, эта работа поручена\делает уважаемый Slavko.
Возможно он хотя бы раз в год просматривает личку, но письмо, валяющееся в "исходящих" с февраля не обнадеживает...

Возможно ты уже понял, что пользуясь ДМ ты не можешь ждать милостей от природы разработчиков? :lol: :evil:
Если разрабы не читают форумы, это не значит что
"дикая" программа
.
И вообще, откуда ты цитируешь это слово?!
Ты про Slavko читал предложение? Это называется эффективное распределение труда. Подсказываю на будущее. Может пригодится.
Я вообще тебя не понял. Ты про что?
В моем посте вроде все логично расписано!
Или ты пришел поговорить? :twisted:
Или повлиять на разработчиков?
Alex Qwerty
Гуру
Posts: 175
Joined: 16 Jun 2007, 8:56 Sat

Post by Alex Qwerty »

ZETZET wrote:Это называется эффективное распределение труда.
Это называется "положили на юзеров и все их хотелки". Что ДМ бесплатный и мне никто ничего не должен - помню.
Или ты пришел поговорить? :twisted:
Просто наболело. Не обращай внимания.
Или повлиять на разработчиков?
На это я уже не надеюсь.

Оффтопить прекращаю.
XPProSP2, DM 5.6.1.1187, Opera 10.10.1893, oGet
ZETZET
Бывалый
Posts: 11
Joined: 27 May 2007, 3:57 Sun

Post by ZETZET »

Это называется "положили на юзеров и все их хотелки". Что ДМ бесплатный и мне никто ничего не должен - помню.
- тогда для чего мы все здесь собрались?
Форум есть? Есть. Пожелания есть? Есть. Разрабы есть? Есть. К пожеланиям прислушиватся? ...
С таким отношением к юзерам, проще вообще закрыть все форумы. Чтоб юзеры не беспокоили. В общем нет в этом всём логики...
Просто наболело. Не обращай внимания.
Просто не надо так, резко с наскока к незнакомым людям. Да с сарказмами и с наездами, да еще и с объяснением прописных истин...
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

Вставлю свои 5 копеек.
ZETZET wrote: Официальный пример плагина 2(?) годичной давности... Чем они(разрабы) занимаются? Версии ДМ вроде выходят исправно...(тьфу...тьфу)
А смысл менять исходник, если ничего не изменилось в предлагаемом API - даже набор команд? Исходник и до сих пор актуален.
Собственно говоря, как раз API менять, по-моему, не стоит - уж очень он просто и удобно сделан. А вот набор доступных функций можно было бы и расширить. Полтора года назад я поднял эту тему, через год - обновил, убрав лишнее, но эффекта - никакого.
Мой пост про обмен данными через интерфейс в этой ветке, хотя и не первый, но самый значимый, будучи реализован разработчиками, вывел бы плагины на качественно новый уровень. А реакция? Две или три версии уже вышло...

И ведь ничего кардинально менять не надо!

P.S. Если отсутствие команды УДАЛЕНИЯ закачки в интерфейсе плагина - это забота о безопасности пользователя, то, позвольте спросить, забота о чём?
О потерянном трафике? Есть возражения - скачанный файл может тут же грохнуть вирус. Тем более, заметив, что какой-либо плагин скрытно удаляет закачки (не говоря уже о том, что ЛЮБОЙ плагин теоретически может делать что среда программирования позволяет и автор вложил - хоть систему под корень стереть), люди просто перестанут пользоваться этим плагином и будут с опаской относиться к другим плагинам спалившегося автора...

P.P.S. Прошу прощения за оффтоп, но - НА-БО-ЛЕ-ЛО!
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
ZETZET
Бывалый
Posts: 11
Joined: 27 May 2007, 3:57 Sun

Post by ZETZET »

Korney San
Собственно говоря, как раз API менять, по-моему, не стоит - уж очень он просто и удобно сделан.
Согласен. Но добавлю, что его можно наращивать. Делфи славится своим наследованием. В том числе и интерфесов.
Оригинал

Code: Select all

type
  { IDMInterface }
  IDMInterface = interface(IUnknown)
  ['{B412B405-0578-4B99-BB06-368CDA0B2F8C}']
    function DoAction(action: WideString; parameters: WideString): WideString; stdcall;//выполнить какие-либо действия в ДМ
  end;
Наследуем, например так

Code: Select all

  IDMInterfaceEx = interface(IDMInterface)
    function MainWindow: HWnd; // избавит от ПОСТОЯННОГО поиска в плагинах главного окна ДМ
    function MainMenu: HMenu{может TMainMenu?-небудет ли AV при доступе?};  // для легкой интеграции\модификации меню ДМ из плагинов
    ...
  end;
Вот так просто! И ДМ в плагины будет передавать не оригинал, а наследника. Все написанные ранее плагины будут работать с полученным интерфейсом как о оригиналом. А свеженаписанные плагины как с наследником.
А в следующей версии плагин-АПИ можно сделать следующего наследника, с еще более расширенным набором функций. И все старые плагины будут при этом работать без проблем! Вот так вот просто. И не придется ничего переделывать. Надо просто наращивать интерфейс ДМ... Естественно, разработчикам известно о возможности наследовать и наращивать интерфейсы. Другой вопрос, что ничего не делается(?) вообще...
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

ZETZET wrote: Согласен. Но добавлю, что его можно наращивать. Делфи славится своим наследованием. В том числе и интерфесов.
Хе-хе, именно по этому пути я пошёл при написании плагина-переходника Thunk. И даже написал два тестовых плагина, каждый из которых регистрировал свою собственную команду и пытался выполнить команду, зарегистрированную другим.
Отлично работает, между прочим.

Если бы был обмен между плагинами (сделать-то его не легко, ОЧЕНЬ легко), то все плагины расслоились бы на операционные (дополнительные действия на компьютере), интерфейсные (OSD и т.п.) и сервисные (собственно обработка информации о закачках и некая реакция в зависимости от поставленных условий с использованием возможности первых двух классов плагинов). Ярким примером похожего взаимодействия является небезызвестный ICQ-клиент Miranda...

Как пример уже сейчас могу выдать вариант раскладки:
в плагине Rebooter оставить "чиста перезагрузку" и сделать его операционным (ну ленятся разработчики вставить Reboot в API; впрочем, это не единственное, что они ленятся...);
написать операционный плагин AskForm, зашив туда окно подтверждения с таймером а-ля встроенное в DM "Вы хотите выйти?.." (было бы идеально, если бы разработчики дали возможность порулить встроенным через API, но...);
оставить от AutoSwitch ядро управления в виде сервисного плагина.

Я обдумывал возможность реализации этого на базе написанного Thunk. Но где найти столько времени?

Кстати, в плагине ICQ RemoteCP без всяких интерфейсов сделана асинхронная форма настроек, которая при собственном закрытии вызывает интерфейсную функцию EventRaised, подвешенную через обычный указатель, сообщая плагину через собственную команду, что она-де закрылась...

Одним словом, глаза горят и руки чешутся...
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
link
Posts: 1
Joined: 24 Feb 2009, 7:10 Tue

Post by link »

ZETZET wrote:Korney San
Собственно говоря, как раз API менять, по-моему, не стоит - уж очень он просто и удобно сделан.
Согласен. Но добавлю, что его можно наращивать. Делфи славится своим наследованием. В том числе и интерфесов.
Оригинал

Code: Select all

type
  { IDMInterface }
  IDMInterface = interface(IUnknown)
  ['{B412B405-0578-4B99-BB06-368CDA0B2F8C}']
    function DoAction(action: WideString; parameters: WideString): WideString; stdcall;//выполнить какие-либо действия в ДМ
  end;
Наследуем, например так

Code: Select all

  IDMInterfaceEx = interface(IDMInterface)
    function MainWindow: HWnd; // избавит от ПОСТОЯННОГО поиска в плагинах главного окна ДМ
    function MainMenu: HMenu{может TMainMenu?-небудет ли AV при доступе?};  // для легкой интеграции\модификации меню ДМ из плагинов
    ...
  end;
Вот так просто! И ДМ в плагины будет передавать не оригинал, а наследника. Все написанные ранее плагины будут работать с полученным интерфейсом как о оригиналом. А свеженаписанные плагины как с наследником.
А в следующей версии плагин-АПИ можно сделать следующего наследника, с еще более расширенным набором функций. И все старые плагины будут при этом работать без проблем! Вот так вот просто. И не придется ничего переделывать. Надо просто наращивать интерфейс ДМ... Естественно, разработчикам известно о возможности наследовать и наращивать интерфейсы. Другой вопрос, что ничего не делается(?) вообще...
Так всё таки как зарегистрировать команду удаления ссылки по известному ID?
Post Reply