USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  API HTTP Download
gugump
IÇARA
SC - BRASIL
ENUNCIADA !
Postada em 25/08/2008 14:31 hs         
Olá galera!

Eu estou com um grave problema, eu criei um launcher para um jogo online com auto updater, tem umas 200 pessoas jogando esse jogo online e eu usei a MSINET.OCX mais quem usa windows vista ou até mesmo alguem que use o windows XP da erro falando que ela não existe!

Eu não posso obriga-los a registrar, vocês devem entender oque é um game online onde varias pessoas jogam

Eu preciso de uma DLL que faça download e que rode em qualquer WINDOWS sem problemas como eu tenho com a MSINET.OCX!

Eu posso usar a wininet.dll? usar a API da inet? Pelo menos que essa DLL não precisa ser registrada, bastando apenas ela estar na pasta do programa!

Me ajudem por favor, preciso disso urgente

Até mais!
   
CODER_EXPERT
GOIÂNIA
GO - BRASIL
Postada em 25/08/2008 22:45 hs            
Não sei pq vc acha MSINET.OCX um problema, oras, embute msinet.ocx dentro do seu Launcher via Resource e faça com que sempre que ele for executar checar se o msinet.ocx está na pasta System32 do windows, se não tiver então extraia pra lá e registre-a, claro que deve fazer isso na Sub Main.

Você pode optar por este código que também faz download de arquivos da internet

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

Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean
    Dim lngRetVal As Long
    lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
    If lngRetVal = 0 Then DownloadFile = True
End Function

Private Sub Form_Load()
    DownloadFile "http://dominio.com/arquivo.exe", "c:arquivo.exe"
End Sub
     
gugump
não registrado
ENUNCIADA !
Postada em 26/08/2008 13:06 hs   
Eu acho um problema pois ela nem sempre funciona em todos os WINDOWS XP~VISTA

Seria uma boa fazer oque você falou primeiro, embutir a OCX dentro do Launcher e verificar se ela existe!

As duvidas são: Como embutir ela? Como registrar ela? Como descobrir o diretorio do SYSTEM32 sem usar C:WINDOWSSYSTEM32?

Os jogos geralmente usam essa função de verificar as DLL né? Pois quando eu deleto uma DLL e executo 1 jogo, essa DLL é criada!
   
CODER_EXPERT
GOIÂNIA
GO - BRASIL
ENUNCIADA !
Postada em 28/08/2008 21:44 hs            
Primeiro você deve embutir o arquivo OCX dentro do seu EXE, para isso
você deve carregar o Editor de Resouce do seu Visual Basic 6 Enterprise Edition:

* Vá no menu "Add-Ins" -> "Add-In Manager...", quando a janela "Add-In Manager" aparecer
selecione o item "VB 6 Resource Editor" e marque as duas primeiras checkboxes
"Loadded/Unloaded" e "Load on Startup" do Quadro "Load Behavior" e clique em "OK".
Isso irá adicionar um ícone com desenho verde na barra padrão do Visual Basic, esse
ícone é o "Resource Editor".

Agora clique no ícone do "Resource Editor" ou Vá no menu "Tools" -> "Resource Editor", a janela
"VB Resource Editor" aparecerá, então você deverá clicar no ícone "Add Custom Resource"
para adicionar o OCX, é o penúltimo ícone da barra padrão antes do ícone "Ajuda", após
adicionar seu arquivo irá criar uma pasta com nome "CUSTOM" a com a ID "101"

Recomendo você alterar a ID "101" para "MSINET.OCX" e o nome da pasta "CUSTOM" para
"Biblioteca" ou "Library", isso depende da sua organização, para alterar esses nomes
basta clicar duas vezes no seu arquivo binário que deverá estar com a ID "101", a janela
de Propriedades "Edit Properties" irá aparecer.

Após feito a alteração você tem o nome da Pasta e a ID do MSINET.OCX em mãos. Agora vamos usar
a função LoadResData para ter acesso à Resource e Extrair o arquivo:

Dim File() As Byte, lFile As Long
lFile = FreeFile

File = LoadResData("MSINET.OCX", "LIBRARY")

Open "C:MSINET.OCX" For Binary Access Write As #lFile
  Put #lFile, 1, File
Close #lFile

'***********************************************************************************************

Aqui vai a solução completa:
----------------------------

Option Explicit

Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long

Private Declare Sub FatalAppExit Lib "kernel32" Alias "FatalAppExitA" (ByVal uAction As Long, ByVal lpMessageText As String)
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Private Const MAX_PATH As Long = 260

Sub Main()
Call CheckLibrary

Form1.Show
End Sub

Private Sub CheckLibrary()
Dim sMsinet_ocx          As String
Dim sResID_Msinet_ocx    As String
Dim sResType_Msinet_ocx  As String
Dim sPathDest_Msinet_ocx As String

sMsinet_ocx = "MSINET.OCX"                     'Nome do arquivo
sResID_Msinet_ocx = "MSINET.OCX"               'Nome da ID no Resource
sResType_Msinet_ocx = "LIBRARY"                'Nome da Pasta no Resource
sPathDest_Msinet_ocx = GetSysDir & sMsinet_ocx 'Caminho de Destino

Dim bExtract As Boolean
Dim bRet As Boolean

'Checa se o arquivo MSINET.OCX existe na pasta System do Windows
If Dir$(sPathDest_Msinet_ocx, vbReadOnly Or vbHidden Or vbSystem) = Empty Then
  bExtract = Extract(sResID_Msinet_ocx, sResType_Msinet_ocx, sPathDest_Msinet_ocx)
  
  If Not bExtract Then
    FatalAppExit 0, "Ocorreu um erro fatal ao tentar acessar o Resource de " & App.EXEName & ".exe."
    
    'Ou END
  Else
    bRet = DllRegisterServer(sMsinet_ocx)
  
    If Not bRet Then
      FatalAppExit 0, "Ocorreu um erro fatal ao tentar registrar o arquivo " & LCase(sMsinet_ocx) & "."
      
      'Ou END
    End If
  End If
Else
  'Arquivo já existe
End If
End Sub

Private Function Extract(ResId As String, ResType As String, sPathDest As String) As Boolean
On Error GoTo Trata_Erro

Dim File() As Byte, lFile As Long
lFile = FreeFile

'Obtém Dados binários do arquivo a ser extraído do Resource
File = LoadResData(ResId, ResType)

'Grava dados binário do arquivo no HD
Open sPathDest For Binary Access Write As #lFile
  Put #lFile, 1, File
Close #lFile

Extract = Not Extract
Exit Function

Trata_Erro:
End Function

Private Function DllRegisterServer(DllName As String) As Boolean
  Dim hLibrary As Long, hProcAdress As Long, Ret As Long
  
  hLibrary = LoadLibrary(DllName)
  
  If hLibrary <> 0 Then
    hProcAdress = GetProcAddress(hLibrary, "DllRegisterServer") 'DllUnRegisterServer para DesRegistrar
    
    If hProcAdress <> 0 Then
      Ret = _
        CallWindowProc(hProcAdress, GetDesktopWindow, "", ByVal 0&, ByVal 0&)

        DllRegisterServer = True
    Else
      'Arquivo carregado porém o ponto de entrada não foi encontrado
      'Arquivo não pode ser registrado
    End If
  Else
    'Arquivo não encontrado
  End If

  FreeLibrary hLibrary
End Function

Private Function GetSysDir() As String
  Dim strFolder As String
  Dim lngResult As Long
  
  'Obtém o caminho da Pasta System do Windows
  strFolder = String(MAX_PATH, 0)
  lngResult = GetSystemDirectory(strFolder, MAX_PATH)
  
  If lngResult <> 0 Then
    If Right(Left(strFolder, lngResult), 1) = Chr(92) Then
      GetSysDir = Left(strFolder, lngResult)
    Else
      GetSysDir = Left(strFolder, lngResult) & Chr(92)
    End If
  End If
End Function
   
CODER_EXPERT
GOIÂNIA
GO - BRASIL
ENUNCIADA !
Postada em 28/08/2008 21:50 hs            
Desculpe a demora, ando muito ocupado desenvolvendo software. Qualquer coisa envie email.
   
gugump
não registrado
ENUNCIADA !
Postada em 29/08/2008 22:20 hs   
CARAMBA!

Cara, nem sei como te agradecer, era isso tudo que precisava mesmo!!!!

Além de usar para registrar os componentes eu estou usando para deixar um arquivo executavel de um jogo dentro do APP do VB!!!

Até mais!!! Se eu encontrar algum problema volto a postar...
   
Página(s): 1/6      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página