Visual Basic - Baixando arquivos da Web usando a API URLDownloadToFile
Existem muitas maneiras de fazer download de arquivos na rede mundial usando a linguagem Visual Basic 6.
Neste artigo eu vou mostrar a opção quer usa a API URLDownloadToFile.
Esta API esta disponível em todas as versões do sistema operacional Windows (exceto Win3, WinNT3.x ). Sua utilização é bem simples: basta passar o nome do arquivo remoto a ser baixado e o caminho e nome do arquivo local de destino que a API faz o download do arquivo salvando o com o nome e no local indicado.
A API funciona com todos os tipos de arquivos - arquivos textos, imagens, arquivos mpg, wav, zip, etc., sem modificação da rotina ou preocupação com o arquivo que está sendo baixado, e também não há restrição de tamanho.
Após baixar o arquivo ele pode ser aberto e exibido no programa Visual Basic diretamente ou você pode informar o nome e caminho do arquivo baixado para ser aberto por um programa associado à extensão do arquivo usando as funções ShellExecute ou ShellExecuteEx.
Podemos fazer o download de múltiplos arquivos que serão baixados um de cada vez e ao final será retornado true se o download de cada arquivo foi realizado com sucesso.
Sintaxe e informação sobre parâmetros da função:
Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Onde temos:
Nota: A API URLDownloadToFile transporta o arquivo até o cache do IE , em seguida, copia o arquivo para o do sistema de arquivos local ou remoto de destino que você especificou. Dessa forma uma segunda chamada para o download do mesmo arquivo vai trazer o arquivo do cache e não a cópia do local de origem. Para ter certeza de que o download esta sendo feito a partir do local de origem você tem que remover a cópia do arquivo do cache. Para resolver este problema podemos usar a função DeleteUrlCacheEntry.
Bem depois dessa teoria toda vamos à prática.
Baixando um arquivo da internet usando a API URLDownloadToFile
Neste primeiro exemplo vamos baixar o arquivo imagem maco10.gif do site Macoratti.net a partir da URL: http://www.macoratti.net e exibir o arquivo baixado em um controle PictureBox.
Abra o Visual Basic 6 e clique em Standard EXE.
A seguir altere o nome do formulário form1.frm para frmDownload.frm e inclua a partir da ToolBox os seguintes controles no formulário:
Disponha os controles conforme o leiaute mostrado na figura abaixo:
No início do formulário vamos fazer a declaração da API
Private Declare Function URLDownloadToFile Lib "urlmon" _ Alias "URLDownloadToFileA" (ByVal pCaller As Long, _ ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long |
A seguir vamos definir o código no evento Click do botão de comando Baixar e Exibir Arquivo:
Private Sub cmdDownload_Click() On Error GoTo trataErro 'baixar o arquivo URLDownloadToFile 0, txtUrl.Text & "\" & txtArquivo.Text, txtDestino.Text, 0, 0 'exibir o arquivo baixado no picturebox picImagem.Picture = LoadPicture(txtDestino.Text) Exit Sub trataErro: MsgBox Err.Description End Sub |
Executando o programa iremos obter:
Baixando um arquivo da internet usando a API URLDownloadToFile - Limpando o Cache
Neste exemplo eu vou baixar um arquivo HTML do site Macoratti.net. Escolhi baixar o arquivo bancos.htm do endereço http://www.macoratti.net.
Eu vou baixar o arquivo HTML e exibir o seu conteúdo em um controle TextBox.
Vamos usar a função DeleteUrlCacheEntry para remover o arquivo associado ao nome do arquivo de destino do cache se o arquivo existir.
Você pode baixar qualquer arquivo de qualquer endereço remoto usando essa API, por isso fique a vontade para adaptar o exemplo.
No menu Project clique em Add Form e inclua um novo formulário salvando-o com o nome de frmDownload2.frm e a seguir inclua os seguintes controles neste formulário: (vou usar basicamente os mesmos controles do formulário anterior):
Disponha os controles conforme o leiaute mostrado na figura abaixo:
No início do formulário vamos fazer a declaração da API
Private Declare Function URLDownloadToFile Lib "urlmon" _ Alias "URLDownloadToFileA" (ByVal pCaller As Long, _ ByVal szURL As String, ByVal szFileName As String, _ ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long |
A seguir vamos declarar a função DeleteUrlCacheEntry e variáveis associadas para que o arquivo de destino seja removido do cache:
Private Declare Function DeleteUrlCacheEntry Lib
"Wininet.dll" _ Alias "DeleteUrlCacheEntryA" _ (ByVal lpszUrlName As String) As Long Private Const ERROR_SUCCESS As Long = 0 Private Const BINDF_GETNEWESTVERSION As Long = &H10 Private Const INTERNET_FLAG_RELOAD As Long = &H80000000 |
Para exibir o formulário frmDownload2.frm quando o programa for iniciado clique Project-> Project Properties e defina em Startup Object o nome do formulário form2:
A seguir vamos definir o código no evento Click do botão de comando Baixar e Exibir Arquivo:
Private Sub cmdDownload_Click() On Error GoTo trataErro 'baixar o arquivo URLDownloadToFile 0, txtUrl.Text & "\" & txtArquivo.Text, txtDestino.Text, 0, 0 'exibir o arquivo baixado no textbox hfile = FreeFile Open txtDestino.Text For Input As #hfile txtResultado.Text = Input$(LOF(hfile), hfile) Close #hfile Exit Sub trataErro: MsgBox Err.Description End Sub |
Executando o programa iremos obter:
E assim vimos como é simples baixar arquivos da internet usando o Visual Basic 6.
Só por curiosidade você sabia que a linguagem Visual Basic continua entre as 10 linguagens de programação mais usadas em 2013 ?
Veja neste site mais detalhes: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Abaixo uma tabela comparativa retirada do site acima:
Veja que o Visual Basic 6 esta em sétimo lugar, logo abaixo do C#, enquanto que o VB .NET está em décimo primeiro lugar, mas crescendo.
Pegue o sistema completo aqui: Dowload_Web_VB6.zip
João 6:44
Ninguém pode vir a mim, se o Pai que me enviou não o trouxer; e eu o ressuscitarei no último dia.João 6:45
Está escrito nos profetas: E serão todos ensinados por Deus. Portanto todo aquele que do Pai ouviu e aprendeu vem a mim.Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#