06/04/2006

Mensagens do Sistema, Hooks, enfim tratar downloads

Olá, acabo de fazer e cadastro e primeiramente gostaria de dizer que pelos tópicos que li este forum tem um nivel muito bom.

Vamos a minha primeira pergunta.
Preciso fazer que minha aplicação delphi se comunique com o IExplore (apenas por enquanto) como se fosse um gerenciador de downloads. Eu fiz um programa pra fazer o download, fiz as rotinas pra rodar no sistray, mas preciso descobrir como interceptar os downloads quando o usuario clicar no link no navegador.
Alguem jah fez isso, e pode me ajudar? Mensagens do sistema, Hooks o que usar? (tah dificil achar material sobre hook, baixei agora o madCollection e vou estuda-lo) Como descobrir qual mensagem o sistema envia no momento do clique? Usei o Winsight, mas nao achei a bendita kkk... e tambem ele tah travando direto. [url]www.magnun.cjb.net[/url] tem arquivo log.doc que eu fiz quando cliquei no baixaki pra baixar o abobe 7 quem quizer olhar e me dizer qual é a mesagem agradeço ...
Obrigado a todos...


M@gnun

Respostas

07/04/2006

Kroki

Um meio bem simples(pelo IE) é vc bloquear os Downloads Pelas opções da intenet e de pois renomear o arquivo INETCPL.CPL ou renomear a extensão,assim não será possível liberar os downloads normalmente pelas opções.


Responder Citar

07/04/2006

M@gnun

valeu pela resposta kroki, mas bloquear os downloads é facil, tem a sua opção e por proxy tambem, desculpe foi eu que não coloquei a pergunta inteira ... preciso interceptar o download e pegar a sua url. Ai eu vou tratar essa url com condições pre-determinadas pelo cliente. Por isso que tem que ser pelo delphi ... valeu.


Responder Citar

07/04/2006

Kroki

Posso te passar um meio simples de vc ver todas urls em que o mouse se foca numa janela do IE e então vc verifica a extensão do arquivo pra verificar se é uma URL de download ou não,o resto vc faz porque não disse oque tem em mãos..
Usando um Timer e ListBox que podem ser substituidos.

function CapturaStatusbar (Handle: THandle; List: TStringList): boolean; stdcall;
var
hWndIE, hWndIEChild : HWND;
Buffer : array[0..255] of Char;
begin
SendMessage(Handle, WM_GETTEXT, 255, integer(@Buffer[0]));
hWndIE := FindWindow(PCHar(´IEFrame´), Buffer);
if hWndIE > 0 then
begin
hWndIEChild := FindWindowEx(hWndIE, 0, ´msctls_statusbar32´, nil);
if hWndIEChild > 0 then
begin
SendMessage(hWndIEChild, WM_GETTEXT, 255, integer(@Buffer));
List.AddObject(Buffer,TObject(hWndIE));
end;
end;
Result :=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
Handle: THandle;
begin
HWNDIE:=FindWindow(PCHar(´IEFrame´),nil);
if HWNDIE>0 then begin
ListBox1.Clear;
EnumWindows(@GetUrlFromIE, LParam(ListBox1.Items));
end;
end;
A criatividade é sua com o resto,espero ter contribuido.


Responder Citar

07/04/2006

M@gnun

Contribuiu e muito, obrigado, mas a proposito ... sempre o statusbar do navegador te a url completa? pergunto isso pq nos testes que fiz com o winsight vi q depois do lbuttondown, a url é passada para o caption da janela que se abre para download, mas logo é subistituido por ´Donload de arquivo ...´, e nesse caption, as vezez a url sai cortada:
http://ardownload.adobe.com/pub/adobe/reader/win/7x/7.0.5/ptb/AdbeRdr705_DLM_ptb_full.exe

acima eh a url certa e abaixo eh como saiu, lembro, de acordo com o Winshgt

http://ardownload.adobe.com/pub/adobe/reader/win/7x/7.0.5/ptb/AdbeRdr705_DL

vou testar a dica e tentar colocar um tratamento para o lbuttondown do mouse depois posto o resultado. Obrigado


Responder Citar

07/04/2006

M@gnun

funcionou ...

agora fiz uma rotina pra saber se o mouse é precionado

procedure TPrincipal.WndProc(var Msg: TMessage);
var
P: TPoint;
begin

case Msg.Msg of
WM_LBUTTONDOWN:
//faça alguma coisa;
end;
inherited;
end;

porem ela intercepta o clique, entao o evento que ia ser disparado nao acontece, como saber se o mouse foi clicado e continuar o que devia ser feito.
tambem só funciona com a janela do programa, como fazer um tratamento global

valeu.


Responder Citar

07/04/2006

M@gnun

funcionou ...

agora fiz uma rotina pra saber se o mouse é precionado

procedure TPrincipal.WndProc(var Msg: TMessage);
var
P: TPoint;
begin

case Msg.Msg of
WM_LBUTTONDOWN:
//faça alguma coisa;
end;
inherited;
end;

porem ela intercepta o clique, entao o evento que ia ser disparado nao acontece, como saber se o mouse foi clicado e continuar o que devia ser feito.
tambem só funciona com a janela do programa, como fazer um tratamento global

valeu.


Responder Citar

09/04/2006

Nadilson

Eu posso! Você precisa criar um BHO (Broser Helper Object), que é uma dll tipicamente COM (Component Object Model). De qualquer modo, isto é programação avançada e requer muito treino...

Envie-me um e-mail e eu lhe enviarei um pequeno exemplo de como interceptar downloads pelo MS-IE.

Atenciosamente,

Nadilson.


Responder Citar

09/04/2006

Nadilson

Esqueci de citar meu e-mail: nadilson@click21.com.br


Responder Citar

07/04/2014

Michel Marques

Olá...
Poderiam enviar para mim também?
Seria bom que eu pudesse interceptar os downloads.
Pois tenho um sistema que interage com o IE, efetuando preenchimentos e cliques. E num determinado ponto ele faz um download e eu tenho que ficar procurando a janela de download para mudar o caminho e nome do arquivo e clicar em salvar.
A interceptação do download e download me ajudariam bastante.

michel.marques.me@gmail.com

Obrigado
Responder Citar

27/05/2014

Nelson Santos

Desenvolva softwares 3D em Delphi 7
www.3dsistemas.com.br
Responder Citar