Conectando-se à Internet

Compartilhar/Favoritos

Como usar a WININET.DLL para verificar sua conexão dial-up à Internet e conectar-se permitindo ou não ao usuário escolher a conexão através da janela padrão do Windows. Veja como é fácil conectar-se à rede usando o Delphi.

Este é de um grupo de posts muito antigos, de 2002. Vêm do meu antigo site, quando ainda trabalhava com Delphi e tinha um K6-2(!!!!). Bons tempos aqueles…

Provavelmente não serve para muita coisa hoje, mas é legal ver como as coisas eram. Além disso, ainda há gente acessando!

É muito fácil se conectar à Internet através da rede Dial-up com o Delphi (ou com qualquer outra linguagem com acesso a funções de uma DLL).

Você também pode saber se está conectado, mostrar a janela de conexão ou conectar automaticamente, sem aviso.

Para isso, você deverá usar algumas das funções de WININET.DLL, que já estão declaradas na unidade Wininet.

Requisitos

Para usar as funções de WININET.DLL, o Internet Explorer 4 ou superior deve estar instalado.

Os exemplos foram escritos para Delphi 5.

Verificando a conexão

Você pode verificar se está conectado à Internet e saber que tipo de conexão está usando. Para isso, use a função InternetGetConnectedState.

uses Wininet;
 
procedure TestaConexao;
var
  Flags: DWORD;
begin
  if not InternetGetConnectedState(@Flags, 0) then
    ShowMessage('Você não está conectado à Internet.')
  else
  begin
    if Flags and INTERNET_CONNECTION_LAN <> 0 then
      ShowMessage('Você está conectado à Internet através de LAN');
    if Flags and INTERNET_CONNECTION_MODEM <> 0 then
      ShowMessage('Você está conectado à Internet através de MODEM');
    if Flags and INTERNET_CONNECTION_PROXY <> 0 then
      ShowMessage('Você está conectado à Internet através de proxy.');
  end;
end;

A função retorna True se a máquina estiver conectada à Internet e False se não. O primeiro parâmetro é um ponteiro para um DWORD que será preenchido com opções relativas ao tipo de conexão atual ou aos tipos de conexão possíveis caso estiver desconectado.

Se a função retornar False, indicando que não está conectado, Flags é preenchido com as opções possíveis para conexão. Se a máquina estiver configurada para acessar a Internet através de MODEM, Flags será preenchido com INTERNET_CONNECTION_MODEM. Se estiver configurado para acesso via servidor proxy, será preenchido com INTERNET_CONNECTION_PROXY, etc. Lembre-se que a máquina pode estar configurada para acessar a Internet através de vários meios e, por isso, Flags pode ser preenchido com várias combinações de valores.

Na prática, é muito provável que ignore os valores retornados em Flags e utilize só o valor de retorno.

Conectando

A principal função da DLL Winnet para entrar na Internet através de MODEM é a InternetDial.

Exemplo de chamada:

uses Wininet;
 
const
  RASBASE = 600;
 
  { Constantes de erro }
  ERROR_NO_CONNECTION      = RASBASE + 68;
  ERROR_USER_DISCONNECTION = RASBASE + 31;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Res: DWORD;
begin
  // FConn é uma variável declarada na seção "private" do nosso form (Form1)
  // e poderá ser usada mais tarde para desconectar o MODEM da Internet
  // Ela deve ser do tipo DWORD (ou Longword ou Cardinal)
  FConn := 0;
  Res := InternetDial(Handle, nil, 0, @FConn, 0);
  if Res <> ERROR_SUCCESS then begin
    case Res of
      ERROR_NO_CONNECTION: ShowMessage('Existe um erro na conexão dial-up');
      ERROR_USER_DISCONNECTION: ShowMessage('O usuário pressionou Cancelar');
    else
      ShowMessage(SysErrorMessage(Res));
    end;
  end;
end;

A função InternetDial exige 5 parâmetros. O primeiro é o handle da janela parent. O segundo é uma PChar com o nome da conexão dial-up a usar (se nil, irá discar a conexão padrão). O terceiro indica algumas opções sobre a discagem, o quarto deve ser um ponteiro para uma variável que receberá um handle da conexão. Esse handle poderá ser usado mais tarde para você desconectar o MODEM (através de InternetHangup). O quinto é reservado e deve sempre estar com valor zero.

O exemplo acima abre a janela de conexão e permite ao usuário conectar-se ou cancelar. Você pode ainda usar as seguintes constantes como o terceiro parâmetro para mudar o comportamento da função:

  • INTERNET_AUTODIAL_FORCE_ONLINE: força uma conexão online.
  • INTERNET_AUTODIAL_FORCE_UNATTENDED: força uma conexão sem a intervenção do usuário. Não será apresentada nenhuma janela de confirmação de conexão. Se alguma intervenção for necessária, a função irá falhar.
  • INTERNET_DIAL_FORCE_PROMPT: ignora as propriedades da Internet e força a apresentação da janela de conexão ao usuário.
  • INTERNET_DIAL_UNATTENDED: conecta-se sem a intervenção do usuário, se possível. Se for necessário, a janela de conexão será apresentada.
  • INTERNET_DIAL_SHOW_OFFLINE: mostra o botão “Trabalhar offline” ao invés de “Cancelar” na janela de conexão.

Se você quiser conectar-se sem a intervenção do usuário, por exemplo, troque a linha que invoca a função InternetDial do exemplo acima para:

Res := InternetDial(Handle, nil, INTERNET_DIAL_UNATTENDED, @FConn, 0);

Assim, o Windows só apresentará alguma janela que exige intervenção do usuário se necessário.

Se você escolher a opção INTERNET_DIAL_SHOW_OFFLINE e o usuário clicar no botão “Trabalhar offline”, a função retornará ERROR_USER_DISCONNECTION, o mesmo valor retornado pelo botão “Cancelar”.

Desconectando

Para desconectar, utilize a função InternetHangUp da seguinte forma:

InternetHangUp(FConn, 0);

Perceba que FConn é a mesma variável que usamos em InternetDial.

Um detalhe importante é que você só poderá desconectar caso tiver preenchido o valor de FConn através de InternetDial. Por isso, essa opção só é válida caso o seu aplicativo tenha se conectado à rede. Não funciona para o caso da conexão já estar aberta antes.

Para esse caso, você pode usar as funções de RAS (Remote Access Service), que pretendo explicar mais tarde.

Cuidados

Um dos cuidados que você deve ter ao chamar as funções de conexão é que, embora bloqueiem a execução até que a opreração seja processada, as mensagens do Windows são processadas pelo seu aplicativo.

Perceba que, enquanto a janela de conexão estiver ativa, o seu aplicativo pode ser fechado, os botões podem ser pressionados (e processam seus eventos, etc).

Por isso, você deve tomar cuidado para que os eventos gerados pelos seus forms não interfiram na conexão. Uma forma de fazer isso é desabilitar os controles antes de chamar as funções de conexão.

A DLL Wininet

Existem muitas outras funções interessantes em WININET.DLL, entre elas:

  • Trabalhar com o cache do Internet Explorer (incluir, excluir, mudar opções de cache, etc).
  • Pegar, incluir e mudar cookies permanentes do Internet Explorer.
  • Pegar informações da Internet através de HTTP, FTP e Gopher.
  • Pegar e mudar várias opções da configuração da Internet, tais como timeout para várias operações de Internet, configuração de proxy entre muitas outras.

Para conhecer melhor essa DLL, pegue a última versão do Microsoft Internet Development SDK (http://www.microsoft.com/msdownload/platformsdk/sdkupdate/).

You may also like...

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Translate »