Buscar

Trabalhando com a dll wininet

Código

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;
Conn: DWORD;
begin
Conn := 0;
Res := InternetDial(Handle, nil, 0, @Conn, 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 4 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 e o quarto é 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, @Conn, 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(0, 0);


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/).
 

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Object pascal
Adicionada dia: 01/06/04
Por: Newton Michel De Oliveira
Visualizada: 12250 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009