небольшой вопрос по разработке

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

Moderators: Korney San, marcipan

Post Reply
lpn_com
Posts: 5
Joined: 10 Mar 2008, 23:54 Mon

небольшой вопрос по разработке

Post by lpn_com »

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

покачто получилось
поймать EventRaised - dm_download_added
изменить
и добавить DoAction - AddingURL
но в результате стартуют 2 закачки
как заблокировать старт ненужной :?:
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

Ещё один наступающий на грабли... :)

У тебя два варианта:
1. При добавлении закачки нажимать кнопку "Закачать позже" :)
2. После добавления второй закачки давить первую через StopDownloads.

В любом случае первую закачку, если она не нужна, придётся удалять вручную.
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

Предложение модераторам:
собрать в ветке форума "Плагины" все темы с похожими на этот вопросиками и слить в одну "Вопросы при разработке плагинов". Будет сходняк программеров. :)
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
lpn_com
Posts: 5
Joined: 10 Mar 2008, 23:54 Mon

Post by lpn_com »

спасибо, StopDownloads помогло, осталось только удалить из листа
жалко что нельзя менять параметры закачки до ее добавления :(
собрать в ветке форума "Плагины" все темы с похожими на этот вопросиками и слить в одну "Вопросы при разработке плагинов". Будет сходняк программеров.
согласен, а первое сообщение что-то типа фака сделать :mrgreen:
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

lpn_com wrote:жалко что нельзя менять параметры закачки до ее добавления :(
Это если разработчики реализуют в интерфейсе событие типа dm_download_adding (окно "Добавить закачку" закрылось, закачка уже получила ID и прочие параметры (чтобы было что через GetDownloadInfoByID доставать ;) ), но ещё не стала в очередь обработки) - у половины плагинов (точнее, у их авторов) головняк пропадёт и ссылки двоиться не будут. :)
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
lpn_com
Posts: 5
Joined: 10 Mar 2008, 23:54 Mon

Post by lpn_com »

а планируется в обозримом будущем ? :?
может попросить разработчиков :D
x2088
Гуру
Posts: 556
Joined: 26 Jul 2007, 19:28 Thu
Contact:

Post by x2088 »

И вообще, чё за хр**ь? Это начинает доставать. Почему управлять закачками из вне по нормальному практически нельзя? РАЗРАБЫ сделайте нормальную командную строку, для того, чтобы было всё "от" и "до" надо от силы мин. 30. Что в ней есть сейчас? - ВКЛ. и ВЫКЛ., а где остальное? Кто сможет мне сказать? С помощью командной строки можно управлять откуда угодно и в любой момент, а главное - без особых усилий и обезьяну можно научить. Пчему одну и ту же управляющую команду из плагина можно послать, а командной строкой - нет?! :evil:

Сейчас есть такой полудохлый плагин (наверно разраб на него "забил" или у него больше "нет" времени), называется - IcqControl, по самой полной он не позволяет управлять закачкой потому, что DM не поддерживает некоторые возможности по управлению своими закачками из вне. Вдобавок в плагине совсем нет администрирования, за исключением смены владельца, а ведь плагин ОФИЦИАЛЬНЫЙ. :twisted:

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

Post by Korney San »

x2088 wrote:Korney San, выложите пожалуйста в первом своём посте данной темы полный список команд и их описания - для начинающих программеров это будет хорошей справкой.
Эээ а собственно, зачем?
Полный список команд (и что они могут дать) приведён в файле readme.txt, идущем в архиве с примером плагина. Лучше, чем там написано, я объяснить не смогу, потому что - не разработчик DM. Остальное - только собственными силами.
Я, например, уже во второй раз перекроил dmtest_pluginImpl.pas "для себя" и сделал шаблон формы настроек, а также вынес некоторые указанные в readme константы в отдельный модуль.
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
x2088
Гуру
Posts: 556
Joined: 26 Jul 2007, 19:28 Thu
Contact:

Post by x2088 »

Вопросы "Что", "Где", "Как" и "Куда" очень редко, но возникают, я подумал: "Раз они возникают, значит там расписано не всё", вы сами назвали lpn_com "Ещё одним, наступающим на грабли" и сказали, что уже 2 раза дописывали эту справку для себя...
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Post by Korney San »

x2088 wrote:Вопросы "Что", "Где", "Как" и "Куда" очень редко, но возникают, я подумал: "Раз они возникают, значит там расписано не всё",
Не стоит путать описание самой команды с описанием способов использования этой команды. :)
x2088 wrote:вы сами назвали lpn_com "Ещё одним, наступающим на грабли"
Да, назвал, потому что:
а) есть событие добавления закачки - по нему можно отследить нужную закачку
б) есть команда добавления новой закачки - с её помощью можно добавить НОВУЮ закачку с необходимыми параметрами
в) есть команда остановки закачки
г) НЕТ команды ИЗМЕНЕНИЯ параметров СУЩЕСТВУЮЩЕЙ закачки (грабли, про которые не раз говорилось в разных темах)
д) ЭКСПЕРИМЕНТАЛЬНЫМ путём (мной лично) было установлено, что если ДОБАВИТЬ закачку с УЖЕ ИМЕЮЩИМСЯ URL (= существующую), но с другими параметрами, то новые параметры заменят существующие
Используя б) и в), можно добавить новую закачку и остановить ненужную.
Используя д) и б), можно добавить в существующую закачку нужный URL как зеркало.
Что я и использую в плагине LinkPartRemover, вырезая из временной ссылки "лишние" части, а дальше DM по издыханию временной ссылки переходит на зеркало и качает себе дальше. :)
Но, пардон, КАК использовать имеющиеся команды, каждый соображает сам. :) Это уже не справка, это уже методология. :)
x2088 wrote:и сказали, что уже 2 раза дописывали эту справку для себя...
Я дописывал не справку, а исходный текст плагина, добавляя код, который мне каждый раз приходилось копировать при начале работы над новым плагином. Это две большие разницы. :)
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
x2088
Гуру
Posts: 556
Joined: 26 Jul 2007, 19:28 Thu
Contact:

Post by x2088 »

ОФФТОПИК:
Может я и плохо выражаю в данном направлении свои мысли, и у меня с вами разная логика, но в чём-то есть сходство, тем не менее ваш ответ частично (примерно 50/50) соотвестсвует моей задумке, поскольку в нём есть какие-то объяснения "что - куда и как это можно использовать". И вдальнейшем в этом форуме вопросов про это уже, скорей всего - не будет.
lpn_com
Posts: 5
Joined: 10 Mar 2008, 23:54 Mon

Post by lpn_com »

нашел способ чтобы подменять URL, правда сделал на C++, но думаю тоже самое можно сделать и на Delphi, ибо никаких библиотек нестандартых не использовалось
суть метОды в подмене функции оконной процедуры (или как там она называется))

первое что делаем это ищем окно "Добавить закачку", оно создается сразу при запуске DM хоть его и не видно;
сохраняем указатель на оригинальную функцию обработки сообщений для этого окна и прописываем свою

Code: Select all

HWND MainWindow=FindWindow("TFileInfoForm",0);
WNDPROC OriginalWinProc=(WNDPROC)GetWindowLong(MainWindow,GWL_WNDPROC);
SetWindowLong(MainWindow,GWL_WNDPROC,(LONG)MyWinProc);
а вот и сама оконная функция
перехватываем два сообщения, WM_SHOWWINDOW - чтобы сохранить хендлы на элементы управления, WM_COMMAND - для отлавливания нажатия кнопок

Code: Select all

LRESULT CALLBACK MyWinProc(HWND hwnd,UINT Msg,WPARAM wParam,LPARAM lParam) 
{
	static HWND Link_Combo=0; // окошко с URL
	static HWND BeginButton=0; // Кнопка "Начать закачку"
	static HWND LaterButton=0; // Кнопка "Закачать позже"

	switch(Msg)
	{
	case WM_COMMAND:
		if(HIWORD(wParam)==BN_CLICKED)
		{
			if((HWND)lParam==BeginButton) // нажатие кнопки "Начать закачку"
			{
				//SetWindowText(Link_Combo,"ссылка"); // записать свой URL
				//return TRUE; // заблокировать нажатие кнопки
			}
			if((HWND)lParam==LaterButton) // нажатие кнопки "Закачать позже"
			{
				//return TRUE;
			}
		}
		break;
	case WM_SHOWWINDOW:
		if(wParam)
		{
			Link_Combo=FindWindowEx(hwnd,FindWindowEx(hwnd,0,"TComboBox",0),"TComboBox",0);
			BeginButton=FindWindowEx(hwnd,0,0,"Начать закачку");
			LaterButton=FindWindowEx(hwnd,0,0,"Закачать позже");
		}
		break;
	}
	return OriginalWinProc(hwnd,Msg,wParam,lParam); // вызываем оригинальную
}
поиск хэндлов элементов реализован конечно таксе, но можно чтонибудь похитрее придумать :)
Kela
Posts: 3
Joined: 01 May 2008, 22:04 Thu

Post by Kela »

lpn_com
ИМХО, конечно, но этим вы нарушаете принцип плагинов: они должны использовать открытое, документированное API... А вы уже оконную процедуру меняете... Не хотел бы я такой плагин поюзать ;)
lpn_com
Posts: 5
Joined: 10 Mar 2008, 23:54 Mon

Post by lpn_com »

а что делать, если с помощью открытого, документированного API не достич нужного результата :roll:
Post Reply