Página 1 de 1

Presciso Converte ou Usar esta funcao em Harbour/Xharbour

Enviado: 23 Mar 2011 14:24
por frazato
Bom dia!

Estou tendo um baita dificuldade para adaptar este código para o harbour ou xharbour se alguem puder colocar a maneira correta de utilizar agradeço.


Frazato

Código: Selecionar todos

//----------------------------------------------------------------------------------------------------------------------//
  DLL Function UrlDownloadToFile(pCaller AS LONG, szURL AS STRING, szFileName AS STRING, dwReserved AS LONG,;
                                 lpfnCB AS LONG) AS LONG PASCAL FROM "URLDownloadToFileA" LIB "UrlMon.dll"
  DLL Function DeleteUrlCacheEntry(lpszUrlName AS STRING) AS LONG PASCAL FROM "DeleteUrlCacheEntryA" LIB "wininet.dll"
//----------------------------------------------------------------------------------------------------------------------//

Re: Presciso Converte ou Usar esta funcao em Harbour/Xharbour

Enviado: 23 Mar 2011 15:28
por asimoes
Frazato,

Vou tentar passar algumas dicas para harbour:

Para este teste você vai precisar incluir este include

#include "hbdyn.ch"

//Retorna a string
//cStatus:=hb_dynCall( { "pcDLLVersion", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )})
//info(cStatus)

//Retorna a string
//cStatus:=hb_dynCall( { "Nada", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )},'TESTE COM DELPHI')
//info(cStatus)

//Retorna a string
//cStatus:=hb_dynCall( { "TrimAllChar", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )},'TESTE COM DELPHI',' ')
//info(cStatus)

//Retorna a string
//cStatus:=hb_dynCall( { "DiaSemana", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )},dtoc(Date()))
//info(cStatus)
//Comando usado na impressora térmica Bematech MP-4000 TH USB
//nStatus:=hb_dynCall( { "FormataTX", nHandleDLL,HB_DYN_CALLCONV_STDCALL},cLinha,2, 0, 0, 0, 0)

Para o seu exemplo:

Não sei se vai funcionar, mas tenta isto:
nHandleDLL:=hb_LibLoad("UrlMon.dll")

Frazato, quais os parâmetros dessa função?

Os parâmetros que eu estou chutando: "http://www.url.com.br" e "arquivo.txt"

nStatus:=hb_dynCall( { "URLDownloadToFileA", nHandleDLL,HB_DYN_CALLCONV_STDCALL},"http:\\url.com.br","arquivo.txt")
ou
nStatus:=hb_dynCall( { "URLDownloadToFileA", nHandleDLL,HB_DYN_CALLCONV_STDCALL},0,"http://www.example.com/metasploit.exe", ... t.exe",0,0)

Re: Presciso Converte ou Usar esta funcao em Harbour/Xharbour

Enviado: 23 Mar 2011 16:07
por frazato
Qual Lib tenho que colocar junto com o harbour para compilar?

Frazato

Re: Presciso Converte ou Usar esta funcao em Harbour/Xharbour

Enviado: 23 Mar 2011 21:43
por asimoes
Olá,

A lib que você deve usar é a hbwin

Ops. não énecessário a hbwin.

Obs.: use a versão mais recente do harbour.

Inclua somente o include #include "hbdyn.ch"

[]´s

Re: Presciso Converte ou Usar esta funcao em Harbour/Xharbour

Enviado: 23 Mar 2011 22:06
por asimoes
Olá Frazato,

Veja se este código pode te ajudar também:

Libs necessárias: hbtip e hbwin

Código: Selecionar todos

FUNCTION MAIN
    LOCAL cURL:=  "http://www.bcb.gov.br/Ftp/pstaw10/leiame.txt"
    local oHyperlink
    REQUEST HB_LANG_PT
    REQUEST HB_CODEPAGE_PT850
    HB_LANGSELECT("PT")
    HB_CDPSELECT( "PT850" )
    oHyperlink := TOLEAuto():New( "Microsoft.XmlHttp" )
    oHyperlink:Open( "GET", cURL, .F. )
    oHyperlink:Send( "" )
    cResponseText := oHyperlink:ResponseText
    memoedit(hb_ansitooem(cResponseText))
RETURN Nil

Re: Presciso Converte ou Usar esta funcao em Harbour/Xharbour

Enviado: 23 Mar 2011 22:12
por asimoes
Frazato

Este exemplo funciona:

nHandleDLL:=hb_LibLoad("UrlMon.dll")
nStatus:=hb_dynCall( { "URLDownloadToFileA", nHandleDLL,HB_DYN_CALLCONV_STDCALL},0,"http://www.bcb.gov.br/Ftp/pstaw10/leiam ... e.txt",0,0)
hb_LibFree(nHandleDLL) //liberar a dll
Nos informa depois.

[]´s

Re: Presciso Converte ou Usar esta funcao em Harbour/Xharbour

Enviado: 24 Mar 2011 13:02
por frazato
Bom dia ! o Código para pegar o arquivo Txt na WEB funcionou legal! Só que presciso pegar um imagem o tal do "CAPTCHA" da NFe para fazer a leitura da pagina e transformar em DBF parte do codigo ja esta no forum em harbour 2.0.0 soque nao esta pegando o corretamente.

Tentei passa o endereco abaixo para pegar a imagem so que não retorna a imagem corretamente.
"http://www.nfe.fazenda.gov.br/scripts/s ... ?opt=image" so que cria o arquivo com


Segue parte do codigo que estou tentando ajustar para pegar o resultado da pagina de impressao da NFe.

Código: Selecionar todos

* teste para leitura de nfe da web
* Fernando Athayde

PROCEDURE Main()
   Exm_IExplorer()
RETURN

STATIC PROCEDURE Exm_IExplorer()

   oIE := win_oleCreateObject( "InternetExplorer.Application" ) // INICIA OLE
   IF oIE  == NIL
      ? "Error. IExplorer not available.", win_oleErrorText()
   ENDIF

   lErroCaptcha := .F.
   DO WHILE .T.
      abreFormularioNFe("inicio")
      IF !abreCaptcha()
         lErroCaptcha := .T.
         EXIT
      ENDIF

      cCaptcha="       "
      @ 0,0 GET cCaptcha PICT "@X"
      READ
      cCaptcha=ALLTRIM(cCaptcha)
      IF LASTKEY() = 27
         EXIT
      ENDIF

      IF !abreFormularioNFe("preencimento")
         LOOP
      ENDIF

      cCorpoNfe := ""
      IF !mostraImpressao(.F.)
         LOOP
      ELSE
         // OK
         MEMOWRIT("corpo.html",cCorpoNfe)
         EXIT
      ENDIF
   ENDDO
   IF lErroCaptcha
      ? "erro ao obter captcha"
   ENDIF
   oIE:Quit()

RETURN

FUNCTION abreFormularioNFe(cTipo)
   IF cTipo == "inicio"
      oIE:Visible := .F.
      oIE:menubar = .F.
      oIE:toolbar = .F.
      oIE:statusbar = .F.

      oIE:Navigate( "https://www.nfe.fazenda.gov.br/portal/FormularioDePesquisa.aspx?tipoconsulta=completa" )
      WHILE oIE:ReadyState != 4
         HB_IDLESLEEP( 0 )
      ENDDO
   ELSE

      oIE:Visible := .F.
      oIE:GoBack()
      WHILE oIE:ReadyState != 4
         HB_IDLESLEEP( 0 )
      ENDDO
      IF oIE:LocationURL = 'https://www.nfe.fazenda.gov.br/portal/FormularioDePesquisa.aspx?tipoconsulta=completa'
         oIE:Document:All('ctl00$ContentPlaceHolder3$chaveAcesso', 0):value := '35101206995064000156550010000000430000000430'
         oIE:Document:All('ctl00$ContentPlaceHolder3$intercepta', 0):value := cCaptcha
         oIE:Document:All('ctl00$ContentPlaceHolder3$btcontinuar', 0):click()
         WHILE oIE:Busy
            HB_IDLESLEEP( 0 )
         ENDDO
         IF ! oIE:LocationURL == 'https://www.nfe.fazenda.gov.br/portal/visualizacaoNFe/completa/Default.aspx' //nao preencheu corretamente
            RETURN(.F.)
         ENDIF
      ELSE
         RETURN(.F.)
      ENDIF
   ENDIF
RETURN(.T.)

FUNC abreCaptcha()
   IF ! oIE:LocationURL == 'https://www.nfe.fazenda.gov.br/portal/FormularioDePesquisa.aspx?tipoconsulta=completa'
      RETURN(.F.)
   ENDIF
    oIE:left = 0
    oIE:top = 0
    oIE:height = 180
    oIE:width = 260
    oIE:Visible := .T.
    oIE:Navigate( "https://www.nfe.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image" )
    WHILE oIE:ReadyState != 4
       HB_IDLESLEEP( 0 )
    ENDDO
RETURN(.T.)

FUNC mostraImpressao(lMostra)
   IF lMostra
     oIE:Visible := .T.
     oIE:left = 0
     oIE:top = 0
     oIE:height = 600
     oIE:width = 800
   ENDIF
   oIE:Navigate( 'https://www.nfe.fazenda.gov.br/PORTAL/visualizacaoNFe/completa/impressao.aspx' )
   WHILE oIE:ReadyState != 4
      HB_IDLESLEEP( 0 )
   ENDDO
   IF oIE:LocationURL = 'https://www.nfe.fazenda.gov.br/PORTAL/visualizacaoNFe/completa/impressao.aspx'
      cCorpoNfe := oIE:Document:body:innerHTML
   ELSE
      RETURN(.F.)
   ENDIF
RETURN(.T.)
Este codigo no caso nao funciona:


Em relação a utilizar a função da DLL para baixar a imagem do CAPTCHA, na hora compilar diz não ter a "hbdyn.ch" estou usando o harbour 2.0.0


Frazato

Re: Presciso Converte ou Usar esta funcao em Harbour/Xharbour

Enviado: 24 Mar 2011 13:59
por asimoes
Olá Frazato,

No inicio do código que você postou coloca a tag code e /code com [ inicio e no final ]
Quanto ao "CAPTCHA" ai pegou. O captcha foi criado para dificultar o uso de aplicação "ROBOT".
Na versão 2.0 do harbour, não tem este include hbdyn.ch, você vai ter que conseguir uma versão mais recente do harbour.

[]´s

Re: Presciso Converte ou Usar esta funcao em Harbour/Xharbour

Enviado: 28 Mar 2011 13:28
por asimoes
Dica para baixar de um FTP Server

Código: Selecionar todos

   nStatus:=hb_dynCall( { "URLDownloadToFileA", nHandleDLL,HB_DYN_CALLCONV_STDCALL},0,"ftp:\\usuario:senha@usuario.dyndns.org:porta\leiame.txt","d:\leiame.txt",0,0)
[]´s