Предупреждение о приближении завершения закачки

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

Moderators: Korney San, marcipan

Post Reply
Qwertiy
Гуру
Posts: 764
Joined: 07 Jan 2011, 1:45 Fri
Location: Россия

Предупреждение о приближении завершения закачки

Post by Qwertiy »

Мне бы пригодился плагин, который предупреждает о том, что до завершения закачки осталась, например, 1 минута. Естественно, интервал должен настраиваться.

Заранее спасибо.
Пожалуйста, посмотрите: Использование ссылок в тексте сообщений
Поддерживаются браузеры: Опера 12, Хром, Firefox.
Обновлено: 21.09.2012. Надо бы ещё подправить и обновить...
Ссылки на файлы обновлены: 24.05.2013.
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Re: Предупреждение о приближении завершения закачки

Post by Korney San »

Вы готовы выделить на его разработку некую сумму?
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Qwertiy
Гуру
Posts: 764
Joined: 07 Jan 2011, 1:45 Fri
Location: Россия

Post by Qwertiy »

Korney San wrote:Вы готовы выделить на его разработку некую сумму?
Нет... Я лучше постараюсь разобраться, как написать плагин не на Delphi.
Пожалуйста, посмотрите: Использование ссылок в тексте сообщений
Поддерживаются браузеры: Опера 12, Хром, Firefox.
Обновлено: 21.09.2012. Надо бы ещё подправить и обновить...
Ссылки на файлы обновлены: 24.05.2013.
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Re:

Post by Korney San »

Qwertiy wrote:Нет... Я лучше постараюсь разобраться, как написать плагин не на Delphi.
Попробуйте освоить то, что сделал VoLT.
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Qwertiy
Гуру
Posts: 764
Joined: 07 Jan 2011, 1:45 Fri
Location: Россия

Post by Qwertiy »

Korney San wrote:Попробуйте освоить то, что сделал VoLT.
Как раз пытаюсь понять, почему когда я компилирую этот код в VS2010, DM просто не видит, что плагин вообще существует...
Пожалуйста, посмотрите: Использование ссылок в тексте сообщений
Поддерживаются браузеры: Опера 12, Хром, Firefox.
Обновлено: 21.09.2012. Надо бы ещё подправить и обновить...
Ссылки на файлы обновлены: 24.05.2013.
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Re:

Post by Korney San »

Qwertiy wrote:Как раз пытаюсь понять, почему когда я компилирую этот код в VS2010, DM просто не видит, что плагин вообще существует...
Мне как-то нагуглилось, что в С++ нет понятия "интерфейс". Может, ноги растут оттуда. Сам же VoLT бодался с присвоением классу GUID...
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Qwertiy
Гуру
Posts: 764
Joined: 07 Jan 2011, 1:45 Fri
Location: Россия

Post by Qwertiy »

Korney San wrote:
Qwertiy wrote:Как раз пытаюсь понять, почему когда я компилирую этот код в VS2010, DM просто не видит, что плагин вообще существует...
Мне как-то нагуглилось, что в С++ нет понятия "интерфейс". Может, ноги растут оттуда. Сам же VoLT бодался с присвоением классу GUID...
Выяснил, что проблема (по крайней мере, пока) в экспортируемой функции...
readme.txt wrote:Плагин должен экспортировать единственную функцию - RegisterPlugIn, вызываемую
по соглашению stdcall. Экспортировать ее через __declspec(dllexport) нельзя, т.к.
при этом экспортированное имя будет декорировано в соответствии с соглашением о вызове.
Т.е. будет выглядеть как _RegisterPlugIn@4 - что DMaster'у никак не подходит
Я использовал .def файл.
Только вот VS def-файл игнорирует... А без него получается

Code: Select all

Function Name     : long __stdcall RegisterPlugIn(struct MyPlugin * *)
Address           : 0x10011177
Relative Address  : 0x00011177
Ordinal           : 1 (0x1)
Filename          : DMDIESP.dll
Type              : Exported Function
вместо

Code: Select all

Function Name     : RegisterPlugIn
Address           : 0x004027f0
Relative Address  : 0x000027f0
Ordinal           : 1 (0x1)
Filename          : MyPlugin.dll
Type              : Exported Function
Пожалуйста, посмотрите: Использование ссылок в тексте сообщений
Поддерживаются браузеры: Опера 12, Хром, Firefox.
Обновлено: 21.09.2012. Надо бы ещё подправить и обновить...
Ссылки на файлы обновлены: 24.05.2013.
Qwertiy
Гуру
Posts: 764
Joined: 07 Jan 2011, 1:45 Fri
Location: Россия

Post by Qwertiy »

Нашёл решение

Code: Select all

extern "C" HRESULT __declspec(dllexport) _stdcall RegisterPlugIn( MyPlugin** out) {
#pragma comment (linker, "/export:RegisterPlugIn=_RegisterPlugIn@4")
  *out = &myp;
  return S_OK;
}
Теперь получается так:

Code: Select all

Function Name     : _RegisterPlugIn@4
Address           : 0x10002430
Relative Address  : 0x00002430
Ordinal           : 2 (0x2)
Filename          : DMDIESP.dll
Type              : Exported Function
==================================================
Function Name     : RegisterPlugIn
Address           : 0x10002430
Relative Address  : 0x00002430
Ordinal           : 1 (0x1)
Filename          : DMDIESP.dll
Type              : Exported Function
и плагин определяется.

Теперь буду код писать.
Пожалуйста, посмотрите: Использование ссылок в тексте сообщений
Поддерживаются браузеры: Опера 12, Хром, Firefox.
Обновлено: 21.09.2012. Надо бы ещё подправить и обновить...
Ссылки на файлы обновлены: 24.05.2013.
User avatar
Korney San
Гуру
Posts: 1116
Joined: 02 Oct 2006, 17:01 Mon
Location: Беларусь, Гомель
Contact:

Re:

Post by Korney San »

Qwertiy wrote:Теперь буду код писать.
Отлично!

Вам осталось читать у загрузок поле <timeleft>, сверять с настройкой, умноженной на 60 (если в минутах), и оповещать пользователя каким-либо способом.
Я бы предложил свой сервис всплывающих окон, но для этого Вам придётся переложить на C улучшенный интерфейс...
XPProSP3, DM 5.15.2.1341, Pale Moon 20.0.1, Opera Next 12.15 (1748) RTFM & STFF
Если Вы не можете быть хорошим примером, то Вам просто придётся служить ужасным предостережением. © Кэтрин Эйрд
Qwertiy
Гуру
Posts: 764
Joined: 07 Jan 2011, 1:45 Fri
Location: Россия

Post by Qwertiy »

Пока сделал так:

Code: Select all

    _bstr_t EventRaised(const _bstr_t& eventType, const _bstr_t& eventData)
    {
      static std::set <int> ignore;

      if (eventType == _bstr_t("dm_timer_5"))
        {
        _bstr_t ids;
        wchar_t *ptr, *end, buf[16];
        int cur, n;
        unsigned time;

        ids = DoAction("GetDownloadIDsList", "3");
        for(end=(ptr=(wchar_t*)ids)+ids.length(); ptr<end; ptr+=n)
          {
          if(swscanf(ptr, L"%d %n", &cur, &n) != 1)
            break;
          if(!ignore.count(cur))
            {
            wsprintf(buf, L"%d", cur);
            swscanf(wcsstr((wchar_t*)DoAction("GetDownloadInfoByID",buf),L"<timeleft>")+10, L"%u", &(time=0));
            if(time && time<120)
              {
              ignore.insert(cur);
              MessageBox(0, L"До завершения одной из закачек осталось менее 2 минут!", L"", 48);
              }
            }
          }
        }
      return "";
    }
Потом займусь настройками и, возможно, интерфейсом. А вообще, подумаю над тем, как сделать плагин на VB.NET...

Скачать dll.
Пожалуйста, посмотрите: Использование ссылок в тексте сообщений
Поддерживаются браузеры: Опера 12, Хром, Firefox.
Обновлено: 21.09.2012. Надо бы ещё подправить и обновить...
Ссылки на файлы обновлены: 24.05.2013.
Post Reply