Можно ли перехватить событие загрузки файла программы?

Скажите, пожалуйста, можно ли узнать, когда программа пытается загрузить файл (например, в Internet Download Manager). Я хочу поймать это событие (перехватить его), получить URL-адрес загрузки, а затем уничтожить событие.
Заранее спасибо..

@Jerry Coffin:Sr, я забыл сказать вам, что эта функция IDM не активна по умолчанию. Он включается только тогда, когда вы включаете опцию «Использовать предварительную интеграцию с браузером» в «Загрузка/Параметры» меню IDM. Как здесь:
http://files.myopera.com/UenX/files/Detect.jpg
+ Отметьте вариант (1), OK, затем перезагрузите компьютер.
+ После перезагрузки появится вариант (2), отметьте его, OK, а затем запустите программу. Вы должны увидеть что-то вроде (3) (это появляется, когда я запускаю msgr9us.exe (установочный файл Yahoo! Messenger)) Попробуйте..


person UenX    schedule 27.06.2010    source источник
comment
Он заменяет текст в метке в диалоговом окне загрузки (ссылку) на что-то, определенное пользователем (или заменяет строку на другую). Это то, что вы хотите?   -  person    schedule 30.03.2011


Ответы (3)


Для конкретной программы, такой как Internet Explorer, это вполне разумно (IE включает ловушки для вызова вашего кода при правильных обстоятельствах). Однако для большинства программ это невозможно — они просто не генерируют никакого «события», которое вы могли бы перехватить и «уничтожить».

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

person Jerry Coffin    schedule 27.06.2010
comment
Спасибо. Но Internet Download Manager (IDM) может делать именно то, что я говорю: когда какая-либо программа пытается загрузить файл из Интернета, IDM покажет диалоговое окно и спросит меня, хочу ли я загрузить его с помощью IDM. - person UenX; 27.06.2010
comment
@ user359278: если вы имеете в виду этот IDM (internetdownloadmanager.com), вы ошибаетесь. Быстрая проверка показывает, что диалоговое окно не отображается, когда я использую написанное мной программное обеспечение. - person Jerry Coffin; 27.06.2010

Не совсем. Рассмотрим, как браузер обычно загружает файл: он открывает соединение через сокет TCP с удаленным сервером через порт 23 или 80 и использует для этого соединения протокол FTP или протокол HTTP. Эти вещи вы можете обнаружить, перехватить и модифицировать с высокой надежностью. Но есть и другие программы, использующие другие методы. например, программы обмена файлами P2P, такие как BitTorrent, не используют HTTP или FTP и не загружают файл с одного сервера.

Таким образом, хотя вам не нужно понимать каждую программу, вместо этого вы должны уметь обнаруживать и понимать каждый протокол загрузки файлов.

person MSalters    schedule 28.06.2010
comment
Спасибо, если я просто хочу обнаружить HTTP и FTP, то какой метод мне нужно использовать. - person UenX; 28.06.2010

вы можете перехватить сетевой поток и отфильтровать HTTP-запросы на загрузку.


вам понадобится некоторая библиотека для захвата сетевого трафика (например, http://en.wikipedia.org/wiki/Pcap). Затем вам нужно будет разобрать сетевые пакеты на наличие соответствующих HTTP-сообщений (извините, я не могу их вам дать, я их не знаю). Я не знаю, можете ли вы на самом деле предотвратить отправку пакетов.


Другим (более простым) способом было бы реализовать прокси-сервер (или изменить существующий), чтобы он делал то, что вы хотите. Тогда вам просто нужно подключить IE к вашему прокси, используя настройки прокси-сервера. Проверьте, например, Privoxy, который уже выполняет какую-то фильтрацию.

person Tobias Langner    schedule 28.06.2010