Ir para conteúdo
Fórum Script Brasil
  • 0

Conexão Com A Internet


Paulo Nobre

Pergunta

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

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

É 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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 mensagem

Undeclared 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.

Link para o comentário
Compartilhar em outros sites

  • 0

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.html

2-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 = 21

Veja também na guia Events se o evento onConnect

aponta 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.

Link para o comentário
Compartilhar em outros sites

  • 0

s3c,Boa Noite

Fiz 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_URLs

end;

Neste acima.

Instalei o componente que você havia mencionado anteriormente fiz um outro

progrma e o problema é o mesmo para também no segundo.

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...