O acesso discado à Internet através de MODEM ainda é a forma que a maioria dos internautas escolhe para acessar a Internet. Se pudermos habilitar conexões dial-up em nossos aplicativos (como a função de discagem automática no programa do navegador IE), sem dúvida será mais conveniente para nossos usuários de software (não há necessidade de trocar de aplicativo e executar redes dial-up) e melhorar a facilidade de uso do nosso software, melhorando assim a competitividade do software.
No WIN9X, se a rede dial-up estiver instalada, haverá duas bibliotecas de gerenciamento de rede dial-up, RasApi32.DLL e RasApi16.DLL, no diretório do sistema System do sistema WINDOWS. Podemos usar as funções nelas para criar e. modificar conexões dial-up e acesso dial-up à Internet usando uma conexão dial-up designada.
1. Crie uma nova conexão dial-up
Quando uma conexão dial-up for estabelecida no sistema WIN9X, a conexão dial-up existente poderá ser usada. Se não houver conexão dial-up, será necessário criar uma nova conexão dial-up. A função correspondente é fornecida em RasAPI, seu nome de função é RasCreatePhonebookEntryA e o protótipo da função é:
função RasCreatePhonebookEntryA(hwnd: THandle;lpszPhonebook: pchar): DWord;
stdcall; {localizado na seção de interface}
função RasCreatePhonebookEntryA; externa 'Rasapi32.dll';{ localizada na seção de implementação}
parâmetro:
hwnd (THandle): O handle da janela pai da nova janela de conexão dial-up, que pode ser o Handle do TForm ou a tabela NIL do Windows Desktop (DeskTop);
lpszPhonebook (pchar): Nome da lista telefônica, não tem efeito no Win9X, pode ser definido como uma string vazia
Valor de retorno da função:
0 indica execução bem-sucedida; caso contrário, é um erro.
Abaixo está um exemplo de criação de uma nova conexão dial-up.
{Crie uma nova conexão dial-up}
Procedimento TForm1.Button1Click(Remetente: TObject);
var
dwResultado: DWORD;
começar
//Cria uma nova conexão dial-up na janela atual
dwResult := RasCreatePhonebookEntryA( handle, '' );
se dwResult = 0 então
memo1.lines.add('Nova conexão dial-up bem-sucedida!')
outro
memo1.lines.add('Falha na nova conexão dial-up!')
fim;
2. Modifique as propriedades da conexão dial-up especificada
Se o usuário precisar modificar os atributos da conexão dial-up, como número de telefone, código de país e área, método de conexão, tipo de servidor, etc., ele pode usar a função RasAPI para fazer isso. O nome da função é RasEditPhonebookEntryA e. o protótipo da função é:
função RasEditPhonebookEntryA( hwnd : THandle; lpszPhonebook: pchar;
lpszEntryName: pchar ): DWORD;stdcall; {localizado na parte da interface}
função RasEditPhonebookEntryA; externa 'Rasapi32.dll';{ localizada na seção de implementação}
parâmetro:
hwnd (THandle): O identificador da janela pai da nova janela de conexão dial-up, que pode ser o identificador do TForm, expresso como NIL
Área de trabalho do Windows (DeskTop)
lpszPhonebook (pchar): Nome da lista telefônica, não tem efeito no Win9X, pode ser definido como uma string vazia
lpszEntryName: (pchar): O nome da conexão dial-up a ser modificada, como '163', '169', etc.
Valor de retorno da função:
0 indica execução bem-sucedida; caso contrário, é um erro.
A seguir está um exemplo de modificação das propriedades de uma conexão dial-up especificada.
{Modifique as propriedades da conexão dial-up especificadas}
procedimento TForm1.Button2Click(Remetente: TObject);
var
dwResultado: DWORD;
strDialNome: string;
começar
strDialName := '163';//Define o nome da conexão dial-up como 163
//Especifique e modifique as propriedades da conexão dial-up na janela atual
dwResult:= RasEditPhonebookEntryA(handle, '', PChar(strDialName));
se dwResult = 0 então
memo1.lines.add('Modificar conexão dial-up' + strDialName + 'Sucesso!')
outro
memo1.lines.add('Modificar conexão dial-up' + strDialName + 'Falha!')
fim;
3. Obtenha os nomes das conexões dial-up disponíveis no sistema atual
Para que o usuário opte por discar através de uma conexão dial-up, precisamos obter o nome da conexão dial-up que foi estabelecida no sistema. Depois de estabelecer uma conexão dial-up, o WIN9X grava o nome e os atributos da conexão dial-up no registro. Podemos obter os nomes das conexões dial-up disponíveis no sistema atual e o nome da conexão padrão definido no Internet Explorer no registro. .
Em HKEY_USERS.DefaultRemoteaccessAddresses no registro, os nomes das conexões dial-up que foram estabelecidas na rede dial-up e suas configurações de atributos são listados. O nome de cada item é o nome da conexão dial-up disponível; de cada item é o nome das configurações de propriedade da conexão dial-up disponível. Basta ler o nome de cada projeto para obter os nomes das conexões dial-up disponíveis no sistema atual.
Se o nome da conexão padrão estiver definido no Internet Explorer (Exibir => Opções da Internet => Conexão => Conexão => Configurações => Usar a seguinte conexão de rede dial-up), em HKEY_USERS.DefaultRemoteAccess no registro, há uma string tipo Valor-chave, o nome do valor-chave é InternetProfile e seu valor é o nome de conexão padrão definido no Internet Explorer.
A seguir está um exemplo de como obter os nomes das conexões dial-up disponíveis no sistema atual.
{Observe que a unidade de registro é adicionada a Usos para operar o registro}
{Obtenha os nomes das conexões dial-up disponíveis no sistema atual}
procedimento TForm1.Button3Click(Remetente: TObject);
var
registroTemp : TRegistry;
stringsTemp : TStringlist;
intIndex: inteiro;
começar
registroTemp := TRegistry.Create;
stringsTemp := TStringlist.Create;
com registroTemp do
começar
RootKey := HKEY_USERS;//A chave raiz está definida como HKEY_USERS
//Se houver subkeys.DefaultRemoteAccessAddresses
se OpenKey('.DefaultRemoteAccessAddresses',falso) então
GetValueNames( stringsTemp );//Lê o nome de cada item, ou seja, o nome da conexão dial-up
CloseKey;
fim;
//Conexões dial-up disponíveis no sistema atual
memo1.lines.add( '******************Existem'+ IntToStr( stringsTemp.count ) no sistema atual
+'As conexões dial-up disponíveis são as seguintes******************');
para intIndex:= 0 para stringsTemp.count - 1 faça
memo1.lines.add(stringsTemp.strings[intIndex]);
//Liste os nomes de conexão padrão definidos no Internet Explorer
se RegistryTemp.OpenKey('.DefaultRemoteAccess',false) então
memo1.lines.add( 'O nome de conexão padrão definido no Internet Explorer é' +
registroTemp.ReadString('InternetProfile') );
//libera memória
registroTemp.free;
stringsTemp.free;
fim;
4. Disque usando a conexão dial-up especificada
O objetivo das três tarefas acima é o acesso discado à Internet. Agora vamos dar uma olhada em como usar uma conexão dial-up designada para acesso discado à Internet. A melhor maneira é ligar para o serviço de rede dial-up do WIN9X, que consiste em executar o programa pronto no WIN9X.
Em um programa Delphi, você pode usar o seguinte código para implementar o acesso discado à Internet:
winexec('rundll32.exe rnaui.dll,RnaDial 163',SW_SHOWNORMAL);
O último parâmetro "163" na string é o nome da conexão dial-up.
A seguir está um exemplo de acesso dial-up à Internet usando uma conexão dial-up especificada.
{Acesso discado à Internet usando a conexão dial-up especificada}
procedimento TForm1.Button4Click(Remetente: TObject);
var
strDialNome: string;
começar
strDialName := '163';//Define o nome da conexão dial-up como 163
memo1.lines.add( '****************Usar conexão dial-up' + strDialName
+'Realizar acesso discado à Internet******************');
winexec(PChar('rundll32.exe rnaui.dll,RnaDial ' + strDialName),SW_SHOWNORMAL);
fim;
O programa acima foi depurado e passado em PWIN98+Delphi3.0.