[Descrição]
Este tutorial ensina como criar um Auto Update para colocar para launcher no VB6, um Auto Update serve para atualizar os arquivos do cliente de seus players sempre que necessario.
[Versão 3]
[-] Adicionado novo sistema de verificação de arquivos ja baixados
[-] Adicionado sistema de extração de arquivos rar.
[-] Opções para ativar e desativar noticias e Arquivos RAR.
[Versão 4]
[-] Adicionado sistema de Progresso de todos arquivos de Update.
[-] Adicionada novas funções para mudar as cores das progressbars.
[-] Opção para deletar arquivo RAR apos a Extração ou não.
Exemplo da nova função de colocar cor em ProgressBars:
[Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
[Tutorial Desing]
1° Abra um novo projeto no VB, renomeie o form que ira aparecer para: AutoUpdate.
2° Abra o Form (AutoUpdate) como desing e adicione os seguintes controles:Modifique as seguintes propriedades dos controles:
4° Aperte CRLT + T e selecione os seguintes controles:
Clique em Aplicar.
Agora adicione os seguintes controles dentro do Form:
Mude a propriedade "Name" do Inet para:
iNet
Deixe mais ou menos assim:
[Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
[Tutorial Codigo]
1° Vá no Menu
View clique em
Code. Ira aparecer uma janela de codigo, va na primeira linha e digite o seguinte codigo:
Código:
'Declarações
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'IMPORTANTE !!! ENDEREÇO DO ARQUIVO DE INFORMAÇÃO DO UPDATE
Private Const sEndereço As String = "http://127.0.0.1:8090/update/"
'IMPORTANTE !!! ENDEREÇO DO ARQUIVO DE INFORMAÇÃO DO UPDATE
'Verificação de Noticias ou Extração de Arquivos .RAR
Private Const Noticias As Boolean = True
Private Const ArquivosRAR As Boolean = True
Private Type tAtualização
sArquivo As String
sData_Arquivo As String
sData_Atualização As String
sEndereço As String
End Type
Private sTamanho_do_Arquivo As String
Private uInformaçao() As tAtualização
Private Sub cmdCancelar_Click()
Unload Me
End Sub
Private Sub cmdPronto_Click()
Unload Me
End Sub
Private Sub Form_Initialize()
InitCommonControls
End Sub
Private Sub Form_Load()
If Noticias Then
txtPrincipal.Visible = False
lblAtualização.Top = 100
ProgressBar1.Top = 350
cmdPronto.Top = 700
cmdCancelar.Top = 700
Me.Height = 1700
End If
'Desativa o Botão cmdPronto
cmdPronto.Enabled = False
'Verifica de a Pasta update existe
Me.Show
'Inicia o Update
ComeçarAtualização
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Ao fechar o Programa, o download sendo feito pelo Inet e cancelado assim previnindo de erros ou problemas.
iNet.Cancel
End Sub
Private Sub txtPrincipal_GotFocus()
cmdCancelar.SetFocus
End Sub
Public Sub ComeçarAtualização()
'On Error Resume Next
'Declarações do Codigo
Dim iCnt As Integer
Dim sAtualização As String
Dim sNoticias As String
Dim sSplit_a() As String, sSplit_b() As String
Dim bByte_Atualização() As Byte
Dim iInt As Integer
Dim iArquivo As Integer
Dim iBinary As Integer
Dim sTemp As String
Dim lTamanho As Long, lRestante As Long, lTamanhoAgora As Long
Dim bChunk() As Byte
Dim iProgresso As Integer
Dim sPastas() As String
Dim iMax As Integer
Dim sAtualizacaoINI As String
Dim sNoticiasINI As String
Dim sPastasINI As String
Dim lRar As Long
'Fim das declarações
sAtualização = iNet.OpenURL(sEndereço & "Informacoes.ini", icString) 'Baixando arquivo das informações do update
'Escrevendo o arquivo de verificação dos arquivos de update
Open App.Path & "\Informacoes.ini" For Append As #1
Print #1, sAtualização
Close #1
lblAtualização.Caption = "Checando Atualizaçoes..."
'Inserindo dados nas strings
sAtualizacaoINI = ReadINI(App.Path & "\Informacoes.ini", "Informacoes", "Atualizacao")
sNoticiasINI = ReadINI(App.Path & "\Informacoes.ini", "Informacoes", "Noticias")
sPastasINI = ReadINI(App.Path & "\Informacoes.ini", "Informacoes", "Pastas")
Kill App.Path & "\Informacoes.ini"
'Baixando arquivo de atualização e Noticias
sAtualização = iNet.OpenURL(sEndereço & sAtualizacaoINI, icString)
sNoticias = iNet.OpenURL(sEndereço & sNoticiasINI, icString)
txtPrincipal.Text = sNoticias
sAtualização = sAtualização
sSplit_a = Split(sAtualização, vbCrLf)
ReDim uInformaçao(UBound(sSplit_a)) 'Re-declarando uInformação
'Selecionando Informações dos arquivos a serem baixados
For iCnt = LBound(sSplit_a) To UBound(sSplit_a)
sSplit_b = Split(sSplit_a(iCnt), ", ")
With uInformaçao(iCnt)
.sArquivo = Trim$(sSplit_b(0))
.sData_Atualização = Trim$(sSplit_b(1))
.sEndereço = Trim$(sSplit_b(2))
End With
Next iCnt
'Fim da seleção
'Essa parte vai verificar as pastas, baixar o arquivo, muda a porcetagem do arquivo ja baixado.
For iCnt = 0 To UBound(uInformaçao)
'Verifica se o arquivo ja foi baixado
If VerificarAtualizaçao(uInformaçao(iCnt).sArquivo, uInformaçao(iCnt).sData_Atualização) = False Then
'Coloca informações na Label
lblAtualização.Caption = "Baixando " & uInformaçao(iCnt).sArquivo & ", Aguarde..."
'Verifica as pastas a serem criadas
sPastas() = Split(sPastasINI, "|")
For iMax = LBound(sPastas) To UBound(sPastas)
VerificarPasta (sPastas(iMax))
Next
DoEvents
'Seleciona o arquivo a ser baixado pelo Inet
bByte_Atualização() = iNet.OpenURL(uInformaçao(iCnt).sEndereço, icByteArray)
'Verifica se o Inet esta Executando
Do While iNet.StillExecuting = True
DoEvents
Loop
'Muda o maximo da progressbar para 100
ProgressBar1.Max = 100
'Pega o Tamanho do Arquivo e muda os porcentos da progress bar e do Caption do Form
lTamanho = CLng(iNet.GetHeader("Content-Length"))
lRestante = lTamanho
lTamanhoAgora = 0
Do Until lRestante = 0
If lRestante > 1024 Then
bChunk = iNet.GetChunk(1024, icByteArray)
lRestante = lRestante - 1024
Else
bChunk = iNet.GetChunk(lRestante, icByteArray)
lRestante = 0
End If
lTamanhoAgora = lTamanho - lRestante
iProgresso = CInt((100 / lTamanho) * lTamanhoAgora)
ProgressBar1.Value = iProgresso
AutoUpdate.Caption = iProgresso & "%" & " Baixado" & " - Auto Update - Para ********BR"
Loop
'Escreve o arquivo baixado
iBinary = FreeFile
If VerificarArquivo(App.Path & "\" & uInformaçao(iCnt).sArquivo) Then
Kill App.Path & "\" & uInformaçao(iCnt).sArquivo
End If
Open App.Path & "\" & uInformaçao(iCnt).sArquivo For Binary Access Write As #iBinary
Put #iBinary, , bByte_Atualização()
Close #iBinary
'Escreve no arquivo de update
iArquivo = FreeFile
Open App.Path & sArquivoUPD For Append As iArquivo
If Not uInformaçao(iCnt).sArquivo = "" Then
Print #iArquivo, vbNewLine & "(" & iNumero + 1 & ") = " & uInformaçao(iCnt).sArquivo & "|" & uInformaçao(iCnt).sData_Atualização
Call WriteINI(App.Path & sArquivoUPD, "Atualizações", "Numero", iNumero + 1)
End If
Close #iArquivo
End If
'Verificando se a extração dos arquivos rar esta ativado.
If ArquivosRAR And VerificarRAR(uInformaçao(iCnt).sArquivo) Then
'Abrindo arquivo RAR
Call Rar.Open(App.Path & "\" & uInformaçao(iCnt).sArquivo)
'Extraindo arquivo RAR
lRar = Rar.Unrar(App.Path & "\")
lblAtualização = "Extraindo Arquivo " & uInformaçao(iCnt).sArquivo
'Se ocorrer tudo bem na extração do rar mostra uma mensagem.
If lRar <> 0 Then
lblAtualização = "Arquivo extraido com sucesso."
End If
End If
Next iCnt
'Informação ao Completar a Atualização
If iNet.StillExecuting = False Then
lblAtualização.Caption = "Finalizado..."
End If
AutoUpdate.Caption = "Auto Update"
'Ativa o Botão cmdPronto
cmdPronto.Enabled = True
End Sub
2° Vá no menu
Project depois clique em Add Module. Depois Adicione o seguinte codigo nele:
Código:
Public Const sArquivoUPD As String = "\Updates.upd"
Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Ret As String
Public iNumero As Integer
Public Function VerificarArquivo(Arquivo As String) As Boolean
If Len(Dir$(Arquivo, vbNormal)) > 0 Then
VerificarArquivo = True
Exit Function
Else
VerificarArquivo = False
Exit Function
End If
End Function
Public Function VerificarPasta(Pasta As String)
If Len(Dir$(Pasta, vbDirectory)) > 0 Then
Else
MkDir App.Path & "\" & Pasta
End If
End Function
Public Function VerificarRAR(sArquivo As String)
If Right(sArquivo, 3) = "rar" Then
VerificarRAR = True
Else
VerificarRAR = False
End If
End Function
Public Sub WriteINI(filename As String, Section As String, Key As String, Text As String)
WritePrivateProfileString Section, Key, Text, filename
End Sub
Public Function ReadINI(filename As String, Section As String, Key As String)
Dim RetLen As String
Ret = Space$(255)
RetLen = GetPrivateProfileString(Section, Key, "", Ret, Len(Ret), filename)
Ret = Left$(Ret, RetLen)
ReadINI = Ret
End Function
Public Function VerificarAtualizaçao(sArquivo As String, sData As String) As Boolean
Dim i As Integer
Dim sResultado As String
Dim sSplit() As String
VerificarAtualizaçao = False
iNumero = ReadINI(App.Path & sArquivoUPD, "Atualizações", "Numero")
For i = 1 To iNumero
sResultado = ReadINI(App.Path & sArquivoUPD, "Atualizações", "(" & i & ")")
If Not IsNull(sResultado) Then
sSplit() = Split(sResultado, "|", , vbTextCompare)
If sSplit(0) = sArquivo And sSplit(1) = sData Then
VerificarAtualizaçao = True
End If
End If
Next
End Function
[Configurando]
Bom.. Esta parte e um pouco complicada então leia com atenção para não ter nenhum problema.
1° Você precisa ter um Host, este sera ultilizado para guardar as informações do update e os arquivos que seram baixados pelo mesmo.
2° No host crie um pasta chamada "update". Dentro dessa pasta crie os seguintes arquivos:
3° O modelo do
"Informacoes.ini" e este:
Código:
[Informacoes]
Atualizacao = Atualizacoes.txt
Noticias = Noticias.txt
Pastas =
Atualizacao = neste local coloque o nome do arquivos de atualizações onde ficaram os arquivos a serem atualizados.
Noticias = neste local coloque o nome do arquivo de Noticias, onde ficaram as noticias que serão mostradas no programa.
Pastas = neste local você deve colocar as pastas que precisam ser criadas, neste formato:
Pasta1|Pasta2|Pasta3
4° O modelo do
"Atualizacoes.txt" e este:
As informações são separadas por "," (virgulas).
Se você quiser colocar mais um arquivo e so colocar ele na proxima linha.
5° O modelo do
"Noticias.txt" e um texto normal, para mostrar as informações das ultimas atualizações.
6° Depois de ja ter os arquivos de update configurados, você vai precisar mudar a URL no programa.
Procure no Form AutoUpdate:
Código:
Private Const sEndereço As String = "http://127.0.0.1:8090/update/"
Troque
"http://127.0.0.1:8090/update/" pelo Endereço do seu host.
7° No Form AutoUpdate se encontram duas Const, essas consts dependedo do valor ativa ou não certas opções.
Código:
Private Const Noticias As Boolean = True
True: Ativa as noticias, False: Desativa as noticias.
Código:
Private Const ArquivosRAR As Boolean = True
True: Ativa a extração de arquivos .rar, False: Desativa a extração de arquivos .rar.
Código:
Private Const DeletarRAR As Boolean = False
True: Deleta o arquivo.rar apos extração., False: Não deleta.
8° A nova função da Source, a função que muda as cores das progressbars são muito faceis de se ultilizar, primeiro e preciso procurar no Form_Load as seguintes linhas:
Código:
'Mudando a Cor da ProgreessBar1
Call ProgressBar_ForeColor(ProgressBar1.hwnd, "0000FF")
'Mudando a Cor da ProgreessBar2
Call ProgressBar_ForeColor(ProgressBar2.hwnd, "8B7500")
No codigo: Call ProgressBar_ForeColor(ProgressBar1.hwnd, "0000FF")
O "0000FF" Representa uma cor em HTML, essa representação de cor pode ser encontrada em varios editores de imagem inclusive o Photoshop.
Lembrando: O Primeiro codigo representa a ProgressBar de baixo, e o segundo Representa a ProgressBar de Cima.
Indicação de site para encontrar uma cor desejada:
[Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
(Otimo ;))
[Source]
Download V3: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
Download V4: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
[Source Launcher & Update]
[Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
[Observações]
Se durante o teste o Update der algum erro porfavor venha neste post, e poste o Numero do Erro, Descrição e Linha (Clicando em Debug).
[Creditos]
EneMy - Equipe System