Ale
A WinINet.dll é uma DLL apropriada somente para Win98 ou menor.
Veja alguns trechos de meu aplicativo de trabalho on-line:
REDEFINE BTNBMP ID 100 OF oDlg PROMPT "NET Update" RESOURCE "bmpbtn91" ACTION ( FTPGetFiles( cServer,;
{ "/fivolution/downloads/estoque.dbf","/fivolution/downloads/estoque.fpt" },;
{ cPath+"estoque.dbf",cPath+"estoque.fpt" } ), oLbx2:Refresh(), oLbx2:UpStable() ) LEFT
No codigo acima o meu btão Update traz o estoque da central para a maquina do vendedor externo.
Outro trecho:
/*
**** **** **** **** **** **** **** **** **** **** **** **** ****
* FUNCAO: Modulo de download do arquivo de estoque
**** **** **** **** **** **** **** **** **** **** **** **** ****
*/
function FTPGetFiles( cFTPSite, aSource, aTarget )
local oDlg, oSay1, oSay2, oSay3, oBtnCancel
local oMeter1, oMeter2
local nAmount1, nAmount2
local lEnd := .f.
local nBufSize := 2000
local oInternet, oFTP
cFTPSite := "127.0.0.1"
cUser := ""
cPassword := ""
ESTOQUE->(dbCloseArea())
if fErase( cPath+"ESTOQUE.DBF" ) > 0
MsgStop( "Aquivo esta em uso. Impossivel continuar", "Atencao" )
return .t.
endif
MsgRun( "Conectando ao FTP em "+cFTPSite+"...", "Aguarde",;
{ || oInternet := TInternet():New(),;
oFTP := TFTP():New( cFTPSite, oInternet, cUser, cPassword ) } )
if Empty( oFTP:hFTP )
MsgStop( "Impossivel conectar ao site FTP!" )
return nil
endif
DEFINE DIALOG oDlg RESOURCE "ICopyFiles" TITLE "Baixando arquivos de " + cFTPSite
//REDEFINE BITMAP oBitMap ID 99 OF oDlg RESOURCE "logoBMP" //TRANSPAREN
//REDEFINE BITMAP oBitMap ID 100 OF oDlg RESOURCE "desktop" TRANSPAREN
REDEFINE SAY oSay1 ID 110 OF oDlg
REDEFINE SAY oSay2 ID 120 OF oDlg
REDEFINE METER oMeter1 VAR nAmount1 ID 130 OF oDlg
REDEFINE SAY oSay3 ID 140 OF oDlg
REDEFINE METER oMeter2 VAR nAmount2 ID 150 OF oDlg
REDEFINE BUTTON oBtnCancel ID 2 OF oDlg ;
ACTION ( lEnd := .t., SysRefresh(), oDlg:End() )
oDlg:bStart := { || GetFiles( aSource, aTarget, nBufSize,;
oSay1, oSay2, oMeter1, oSay3, oMeter2,;
@lEnd, oDlg, oFTP ),;
oBtnCancel:SetText( "&Ok" ) }
ACTIVATE DIALOG oDlg CENTERED
fErase( cPath+"ESTOQUE.CDX" )
USE ESTOQUE EXCLUSIVE
MsgRun( "Indexando ESTOQ016...", "Aguarde", {|| ( ordCondSet(,,,,,, RECNO(),,,, ) , ordCreate("estoque", "estoq016", "str(iditem,16,0)", {|| str(iditem,16,0) }, ) ) } )
MsgRun( "Indexando ESTOQ017...", "Aguarde", {|| ( ordCondSet(,,,,,, RECNO(),,,, ) , ordCreate("estoque", "estoq017", "STR(REFERENCIA,16,0)", {|| STR(REFERENCIA,16,0) }, ) ) } )
MsgRun( "Indexando ESTOQ018...", "Aguarde", {|| ( ordCondSet(,,,,,, RECNO(),,,, ) , ordCreate("estoque", "estoq018", "RESUMIDO", {|| RESUMIDO }, ) ) } )
MsgRun( "Indexando ESTOQ019...", "Aguarde", {|| ( ordCondSet(,,,,,, RECNO(),,,, ) , ordCreate("estoque", "estoq019", "DESCRICAO", {|| DESCRICAO }, ) ) } )
MsgRun( "Indexando ESTOQ020...", "Aguarde", {|| ( ordCondSet(,,,,,, RECNO(),,,, ) , ordCreate("estoque", "estoq020", "STR(IDLINHA,3,0)", {|| STR(IDLINHA,3,0) }, ) ) } )
MsgRun( "Indexando ESTOQ021...", "Aguarde", {|| ( ordCondSet(,,,,,, RECNO(),,,, ) , ordCreate("estoque", "estoq021", "FABRICANTE", {|| FABRICANTE }, ) ) } )
ESTOQUE->(dbCloseArea())
USE ESTOQUE NEW SHARED INDEX ESTOQUE
oInternet:End()
return nil
static function GetFiles( aSource, aTarget, nBufSize, oSay1, oSay2,;
oMeter1, oSay3, oMeter2, lEnd, oDlg, oFTP )
local n
local hTarget
local cBuffer := Space( nBufSize )
local nBytes, nFile := 0, nTotal := 0
local nTotSize := 0
local oFile, aFiles, aSizes := {}
for n = 1 to Len( aSource )
aFiles = oFTP:Directory( aSource[ n ] )
if Len( aFiles ) > 0
AAdd( aSizes, aFiles[ 1 ][ 2 ] ) // first file, size
nTotSize += ATail( aSizes )
else
AAdd( aSizes, 0 )
endif
SysRefresh()
next
oMeter2:nTotal = nTotSize
for n = 1 to Len( aSource )
hTarget = FCreate( aTarget[ n ] )
oFile = TFtpFile():New( aSource[ n ], oFTP )
oFile:OpenRead()
oSay1:SetText( "Origem: " + aSource[ n ] )
oSay2:SetText( "Destino: " + aTarget[ n ] )
oMeter1:Set( 0 )
oMeter1:nTotal = aSizes[ n ]
nFile := 0
SysRefresh()
while ( nBytes := Len( cBuffer := oFile:Read( nBufSize ) ) ) > 0 .and. ! lEnd
FWrite( hTarget, cBuffer, nBytes )
oSay3:SetText( "Bytes copiados: " + ;
AllTrim( Str( nTotal += nBytes ) ) )
oMeter1:Set( nFile += nBytes )
oMeter2:Set( nTotal )
SysRefresh()
end
FClose( hTarget )
oFile:End()
if lEnd
exit
endif
next
return nil
No codigo acima eu uso o ICopyFile como base e tudo foi testado em Windows 2003 que possui as mesma compatibilidades do XP.
O ICpyFile esta em um diretorio do Fivewin de uma olhada e qualquer coisa grite