Paulo Nobre Postado Janeiro 22, 2006 Denunciar Share Postado Janeiro 22, 2006 Prezados amigos,Não tenho a mínima experiência com códigos associados a internet, porisso peço a ajuda de vocês para o seguinte:Gostaria de um código que me permitisse o seguinte:1) alertasse a hora em que o computador se conectasse a internet(conexão consumada e não tentativa);2) alertasse a hora da desconexão.3) registrasse os endereços navegados.Isso é muito didícil?Isso exige componentes especiais?O meu propósito não é o de fazer nenhum grande programa de economiana internet.O objetivo é ter um mini controlador para eu ter aqui em casa mesmo.Repito, não tenho NENHUMA EXPERIÊNCIA, porisso peço uma ajuda detalhada se possível!!Agradeço desde já a atenção de todos.Paulo Nobre Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Janeiro 23, 2006 Denunciar Share Postado Janeiro 23, 2006 Olá Paulo, para saber a conexão e desconexão você pode utilizar um TWebBrower e tentar navegar dentro de um timer.Para saber as páginas acessadas, nesse timer você pode acessar o conteúdo da barra de endereços do I.E. pela função de callback do EnumWindows.implementation function Pega_URLs(Hnd:THandle; URLs:TStringList):Boolean; stdcall; // callback var hIE, hIEFilha:THandle; Nome: array[0..255] of Char; begin Result := false; SendMessage(Hnd, WM_GetText, 255, LParam(@Nome[0])); // Acessa o caption hIE := FindWindow('IEFrame', Nome); // Checa se é o IE if hIE = 0 then Exit; hIEFilha := FindWindowEx(hIE, 0, 'WorkerW', nil); // Acessa a barra de ferramentas if hIEFilha > 0 then begin hIEFilha := FindWindowEx(hIEFilha, 0, 'ReBarWindow32', nil); // Acessa a barra de endereços if hIEFilha > 0 then begin hIEFilha := FindWindowEx(hIEFilha, 0, 'ComboBoxEx32', nil); // Acessa o combobox if hIEFilha > 0 then begin SendMessage(hIEFilha, WM_GETTEXT, 255, LParam(@Nome)); // Acesso o texto do combo URLs.Add(Nome); // Adiciona no memo end; end; end; Result := true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Memo1.Clear; EnumWindows(@Pega_URLs, LParam(Memo1.Lines)); // Dispara a callback Pega_URLs end;Coloque um TMemo no Form.A função de callback não pode ser uma função de objeto; coloque-a somente após a implementation. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Janeiro 24, 2006 Autor Denunciar Share Postado Janeiro 24, 2006 Muito Obrigado, s3c,Esse código realmente não iria conseguir montar nunca.Vou usá-lo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Janeiro 24, 2006 Autor Denunciar Share Postado Janeiro 24, 2006 s3c a primeira vez que testei funcionou depois não.Além disso eu gostaria que todas as url ficassem registradas.Tirei o memo1.clear, mas não sei como fazer para acumular..Algo do tipo:memo1.text:= memo1.text + ??O que eu posso fazer?O que você que dizer com tentar navegar dentro de um timer.Desculpe a ignorância mas, nunca trabalhei com este componente e não sei como usá-lo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Guest Postado Janeiro 25, 2006 Denunciar Share Postado Janeiro 25, 2006 memo1.lines.add(texto); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Janeiro 25, 2006 Denunciar Share Postado Janeiro 25, 2006 É só tirar o Memo1.Clear que a função de callback vai adicionando no Memo.Quanto ao WebBrowser, acho melhor você utilizar um TClientSocket que no Delphi 6 está na paleta Internet.1-Configure o TClientSocket: ClientSocket1.Active := false; ClientSocket1.Host := 'ftp.uol.com.br'; ClientSocket1.Port := 21;2-No evento onConnect você chama a função EnumWindows.3-No evento onError você deixa ErrorCode := 0; para que não seja lançada uma exceção.4-Substitua o evento onTimer:procedure TForm1.Timer1Timer(Sender: TObject); begin if ClientSocket1.Active then ClientSocket1.Close; ClientSocket1.Active := true; end;Com isso, quando ocorrer o Timer, se estiver conectado, o Socket gerará o evento onConnect no ftp da UOL e aí a EnumWindows vai adicionando no Memo os endereços das páginas abertas do IE.Se não estiver conectado, não acontece nada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Janeiro 25, 2006 Autor Denunciar Share Postado Janeiro 25, 2006 S3c,Aqui no meu DElphi7 o componente que mais se assemelha(já que o que você falou não tenho) é o TcpCliente (socktes).Quando coloco no evento oNError ErrorCode := 0 ele não compila e manda a mensagemUndeclared identifier: 'ErrorCode'O que faço?Além disso quando me conectei para testar o memo não registra nada?Será que este componente está errado?Entre ouros componentes tem o TcpServes(socktes) e o UdpSocktes(socktes), mas acho que não tem nada a ver.Veja o código todo, por favor.unit UnitInternet; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, OleCtrls, SHDocVw, Sockets; type TForm1 = class(TForm) Memo1: TMemo; Timer1: TTimer; TcpClient1: TTcpClient; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure TcpClient1Connect(Sender: TObject); procedure TcpClient1Error(Sender: TObject; SocketError: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation function Pega_URLs(Hnd:THandle; URLs:TStringList):Boolean; stdcall; // callback var hIE, hIEFilha:THandle; Nome: array[0..255] of Char; begin Result := false; SendMessage(Hnd, WM_GetText, 255, LParam(@Nome[0])); // Acessa o caption hIE := FindWindow('IEFrame', Nome); // Checa se é o IE if hIE = 0 then Exit; hIEFilha := FindWindowEx(hIE, 0, 'WorkerW', nil); // Acessa a barra de ferramentas if hIEFilha > 0 then begin hIEFilha := FindWindowEx(hIEFilha, 0, 'ReBarWindow32', nil); // Acessa a barra de endereços if hIEFilha > 0 then begin hIEFilha := FindWindowEx(hIEFilha, 0, 'ComboBoxEx32', nil); // Acessa o combobox if hIEFilha > 0 then begin SendMessage(hIEFilha, WM_GETTEXT, 255, LParam(@Nome)); // Acesso o texto do combo URLs.Add(Nome); // Adiciona no memo end; end; end; Result := true; end; {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin if TcpClient1.Active then TcpClient1.Close; TcpClient1.Active := true; end; procedure TForm1.FormCreate(Sender: TObject); begin timer1.Enabled:= true; end; procedure TForm1.TcpClient1Connect(Sender: TObject); begin EnumWindows(@Pega_URLs, LParam(Memo1.Lines)); // Dispara a callback Pega_URLs end; procedure TForm1.TcpClient1Error(Sender: TObject; SocketError: Integer); begin //ErrorCode:=0; //If TcpClient1.OnError then ErrorCode:= 0; end; end. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 s3c Postado Janeiro 26, 2006 Denunciar Share Postado Janeiro 26, 2006 Bom, vamos por partes:1-No Delphi 7 o TClientSocket existe, mas não é instalado automaticamente. Se você quiser instalá-lo veja em: http://bdn.borland.com/article/0,1410,29768,00.html2-O TTcpClient também funciona; só que seu evento onError não possui a variável ErrorCode; então retire o evento onError que me parece que mesmo desconectado ele não lança a exceção.Veja suas propriedades:RemotHost = 'ftp.uol.com.br'RemotPort = 21Veja também na guia Events se o evento onConnectaponta para TcpClient1Connect.3-Fique conectado à rede, tecle F5 no begin de Timer1Timer, tecle F5 no begin de TcpClient1Connect; depois tecle F9 e veja se ele passa pelos dois break-points. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Paulo Nobre Postado Janeiro 26, 2006 Autor Denunciar Share Postado Janeiro 26, 2006 s3c,Boa NoiteFiz o que você falou; ele passou pelo primeiro break e parou no segundo..procedure TForm1.TcpClient1Connect(Sender: TObject);begin EnumWindows(@Pega_URLs, LParam(Memo1.Lines)); // Dispara a callback Pega_URLsend;Neste acima.Instalei o componente que você havia mencionado anteriormente fiz um outroprogrma e o problema é o mesmo para também no segundo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Paulo Nobre
Prezados amigos,
Não tenho a mínima experiência com códigos associados a internet, porisso peço a ajuda de vocês para o seguinte:
Gostaria de um código que me permitisse o seguinte:
1) alertasse a hora em que o computador se conectasse a internet(conexão consumada e não tentativa);
2) alertasse a hora da desconexão.
3) registrasse os endereços navegados.
Isso é muito didícil?
Isso exige componentes especiais?
O meu propósito não é o de fazer nenhum grande programa de economia
na internet.
O objetivo é ter um mini controlador para eu ter aqui em casa mesmo.
Repito, não tenho NENHUMA EXPERIÊNCIA, porisso peço uma ajuda detalhada se possível!!
Agradeço desde já a atenção de todos.
Paulo Nobre
Link para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.