RESPUESTA A LA PREGUNTA 24225 DE VISUAL FOXPRO ******************************************************************************* * proposito de la rutina: copiar un archivo a todas las maquinas de la red * * variables: * * disco unidad de red * ******************************************************************************* *el programa usa una tabla llamada maquinas con la siguiente estructura: * *recurso: * * nombre de la maquina en la red y nombre del recurso compartidopor ej:* * \\maquina01\sistemas * *clave : * * clave de acceso del recurso compartido * *carpeta: * * carpeta donde se copiara el archivo * *fecha_copi: * * fecha en la que se copio el archivo (campo datetime) * *exito campo logico para poder verificar la copia del archivo * * activa campo logico para poder verificar si se copia o no el archivo * ******************************************************************************* CLOSE all Clear all USE maquinas GO top disco='r:' =CancelConnection(disco) SCAN for not eof() if activa =CancelConnection(disco) recur= allt(maquinas.recurso) clav= allt(maquinas.clave) ln=AddConnection(disco,recur,clav) IF len(allt(ln))>0 MESSAGEBOX("Error " + ALLT(ln) + " al conectar con la maquina " ; + maquinas.maquina, 0, 'Copia de archivos executable') REPLA fecha_copi with datetime(), exito with .f. ELSE lugar=disco+allt(maquinas.carpeta) COPY file c:\sistemas\expte_v\expte.exe to &lugar * COPY file \\trib01\C\WINDOWS\Profiles\ORTIZ\Escritorio\Programas to &lugar REPLA fecha_copi with datetime(), exito with .t. ENDIF endif ENDSCAN =CancelConnection(disco) FUNCTION GetConnection(lcDrive) DECLARE INTEGER WNetGetConnection IN WIN32API ; STRING lpLocalName, ; STRING @lpRemoteName, ; INTEGER @lpnLength LOCAL cRemoteName, nLength, lcRet, llRet cRemoteName=SPACE(100) nLength = 100 llRet = WNetGetConnection(lcDrive,@cRemoteName,@nLength) lcRet = LEFT(cRemoteName,AT(CHR(0),cRemoteName)-1) RETURN lcRet ENDFUNC *-------------------------------------------------------- * FUNCTION AddConnection(tcDrive,tcResource,tcPassword) *-------------------------------------------------------- * Conecta un recurso compartido a la unidad tcDrive * USO: ? AddConnection("Z:","\\PC_REMOTA\RECURSO") *-------------------------------------------------------- FUNCTION AddConnection(tcDrive,tcResource,tcPassword) LOCAL lnRet DECLARE INTEGER WNetAddConnection IN WIN32API; STRING @lpzRemoteName, ; STRING @lpzPassword,; STRING @lpzLocalName IF PARAMETERS() < 3 lnRet = WNetAddConnection(@tcResource,0,@tcDrive) ELSE lnRet = WNetAddConnection(@tcResource,@tcPassword, @tcDrive) ENDIF IF lnRet # 0 RETURN "Error " + ALLT(STR(lnRet)) + ; " al conectar el drive " + tcDrive ENDIF RETURN "" ENDFUNC *-------------------------------------------------------- * FUNCTION CancelConnection(tcDrive) *-------------------------------------------------------- * Desconecta una unidad de red * USO: ? CancelConnection("Z:") *-------------------------------------------------------- FUNCTION CancelConnection(tcDrive) LOCAL lnRet DECLARE INTEGER WNetCancelConnection IN WIN32API; STRING @lpzLocalName, ; INTEGER nForce lnRet = WNetCancelConnection( @tcDrive, 0) IF lnRet # 0 RETURN "Error " + ALLT(STR(lnRet)) + ; " al desconectar el drive " + tcDrive ENDIF RETURN "" ENDFUNC *-------------------------------------------------------- Gonzalo Ortiz de Urbina webmaster@saltadistinta.zzn.com http://www.lawebdelprogramador.com