Page 1 of 1

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

Posted: 11 Mar 2008, 10:53 Tue
by lpn_com
необходимо поймать добавляемый URL, изменить и добавить закачку с этим измененным URL, подскажите как можно это провернуть

покачто получилось
поймать EventRaised - dm_download_added
изменить
и добавить DoAction - AddingURL
но в результате стартуют 2 закачки
как заблокировать старт ненужной :?:

Posted: 11 Mar 2008, 13:47 Tue
by Korney San
Ещё один наступающий на грабли... :)

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

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

Posted: 11 Mar 2008, 13:54 Tue
by Korney San
Предложение модераторам:
собрать в ветке форума "Плагины" все темы с похожими на этот вопросиками и слить в одну "Вопросы при разработке плагинов". Будет сходняк программеров. :)

Posted: 11 Mar 2008, 14:43 Tue
by lpn_com
спасибо, StopDownloads помогло, осталось только удалить из листа
жалко что нельзя менять параметры закачки до ее добавления :(
собрать в ветке форума "Плагины" все темы с похожими на этот вопросиками и слить в одну "Вопросы при разработке плагинов". Будет сходняк программеров.
согласен, а первое сообщение что-то типа фака сделать :mrgreen:

Posted: 11 Mar 2008, 20:05 Tue
by Korney San
lpn_com wrote:жалко что нельзя менять параметры закачки до ее добавления :(
Это если разработчики реализуют в интерфейсе событие типа dm_download_adding (окно "Добавить закачку" закрылось, закачка уже получила ID и прочие параметры (чтобы было что через GetDownloadInfoByID доставать ;) ), но ещё не стала в очередь обработки) - у половины плагинов (точнее, у их авторов) головняк пропадёт и ссылки двоиться не будут. :)

Posted: 11 Mar 2008, 21:50 Tue
by lpn_com
а планируется в обозримом будущем ? :?
может попросить разработчиков :D

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

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

Korney San, выложите пожалуйста в первом своём посте данной темы полный список команд и их описания - для начинающих программеров это будет хорошей справкой.

Posted: 12 Mar 2008, 10:29 Wed
by Korney San
x2088 wrote:Korney San, выложите пожалуйста в первом своём посте данной темы полный список команд и их описания - для начинающих программеров это будет хорошей справкой.
Эээ а собственно, зачем?
Полный список команд (и что они могут дать) приведён в файле readme.txt, идущем в архиве с примером плагина. Лучше, чем там написано, я объяснить не смогу, потому что - не разработчик DM. Остальное - только собственными силами.
Я, например, уже во второй раз перекроил dmtest_pluginImpl.pas "для себя" и сделал шаблон формы настроек, а также вынес некоторые указанные в readme константы в отдельный модуль.

Posted: 12 Mar 2008, 13:32 Wed
by x2088
Вопросы "Что", "Где", "Как" и "Куда" очень редко, но возникают, я подумал: "Раз они возникают, значит там расписано не всё", вы сами назвали lpn_com "Ещё одним, наступающим на грабли" и сказали, что уже 2 раза дописывали эту справку для себя...

Posted: 12 Mar 2008, 15:44 Wed
by Korney San
x2088 wrote:Вопросы "Что", "Где", "Как" и "Куда" очень редко, но возникают, я подумал: "Раз они возникают, значит там расписано не всё",
Не стоит путать описание самой команды с описанием способов использования этой команды. :)
x2088 wrote:вы сами назвали lpn_com "Ещё одним, наступающим на грабли"
Да, назвал, потому что:
а) есть событие добавления закачки - по нему можно отследить нужную закачку
б) есть команда добавления новой закачки - с её помощью можно добавить НОВУЮ закачку с необходимыми параметрами
в) есть команда остановки закачки
г) НЕТ команды ИЗМЕНЕНИЯ параметров СУЩЕСТВУЮЩЕЙ закачки (грабли, про которые не раз говорилось в разных темах)
д) ЭКСПЕРИМЕНТАЛЬНЫМ путём (мной лично) было установлено, что если ДОБАВИТЬ закачку с УЖЕ ИМЕЮЩИМСЯ URL (= существующую), но с другими параметрами, то новые параметры заменят существующие
Используя б) и в), можно добавить новую закачку и остановить ненужную.
Используя д) и б), можно добавить в существующую закачку нужный URL как зеркало.
Что я и использую в плагине LinkPartRemover, вырезая из временной ссылки "лишние" части, а дальше DM по издыханию временной ссылки переходит на зеркало и качает себе дальше. :)
Но, пардон, КАК использовать имеющиеся команды, каждый соображает сам. :) Это уже не справка, это уже методология. :)
x2088 wrote:и сказали, что уже 2 раза дописывали эту справку для себя...
Я дописывал не справку, а исходный текст плагина, добавляя код, который мне каждый раз приходилось копировать при начале работы над новым плагином. Это две большие разницы. :)

Posted: 12 Mar 2008, 18:14 Wed
by x2088
ОФФТОПИК:
Может я и плохо выражаю в данном направлении свои мысли, и у меня с вами разная логика, но в чём-то есть сходство, тем не менее ваш ответ частично (примерно 50/50) соотвестсвует моей задумке, поскольку в нём есть какие-то объяснения "что - куда и как это можно использовать". И вдальнейшем в этом форуме вопросов про это уже, скорей всего - не будет.

Posted: 13 Mar 2008, 21:17 Thu
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); // вызываем оригинальную
}
поиск хэндлов элементов реализован конечно таксе, но можно чтонибудь похитрее придумать :)

Posted: 01 May 2008, 22:22 Thu
by Kela
lpn_com
ИМХО, конечно, но этим вы нарушаете принцип плагинов: они должны использовать открытое, документированное API... А вы уже оконную процедуру меняете... Не хотел бы я такой плагин поюзать ;)

Posted: 02 May 2008, 23:11 Fri
by lpn_com
а что делать, если с помощью открытого, документированного API не достич нужного результата :roll: