FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ver equipos en la red
Posts: 155
Joined: Fri Oct 21, 2005 06:35 PM
Ver equipos en la red
Posted: Thu Nov 30, 2017 03:23 PM

Buen dia.

Mi consulta se debe a que necesito saber cuales son los equipos que integran la red local y poder ver sus recursos compartidos, estoy usando lo siguiente:
Vec:=HNetView()
pero Vec siempre esta vacio.

Muchas gracias
Jorge Jaurena

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Ver equipos en la red
Posted: Thu Nov 30, 2017 04:40 PM
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 211
Joined: Wed Jul 16, 2008 12:59 PM
Re: Ver equipos en la red
Posted: Fri Dec 01, 2017 10:07 PM
Jorge:

Creo que estos es lo que estas buscando:
Code (fw): Select all Collapse
//----------------------------------------------------------------------------//

#define LEN_LINE    128
#define LEN_NETNAME  23

//aNetName_CMD: Retorna un arreglo bidimencional {cNombre,cDescripcion}
function aNetName_CMD()
local i,cFile,cTxt,cLine,nLines
local aPCs := {}

   if Network()
      //cFile := cTempFile()
      //cFile := Tmp("Cmd_",".TXT")
      //WAITRUN("COMMAND.COM /C net view > "+cFile ,0)
      cFile := RunCMD("net view",.T.)
      if file(cFile)
         cTxt := MemoRead( cFile )
         nLines := MLCount( cTxt, LEN_LINE)//, nTabSize, lWrap )
         FOR i:=1 TO nLines
            cLine := MemoLine( cTxt, LEN_LINE, i)//, nTabSize, lWrap )
            if left(cLine,2)=="\\"
               AADD(aPCs,{LEFT(cLine,AT(" ",cLine)-1),ALLTRIM(RIGHT(cLine,LEN(cLine)-AT(" ",cLine) ))})//,LEN_NETNAME))
            endif
         NEXT
         FERASE(cFile)
      endif
   endif

Return aPCs

//----------------------------------------------------------------------------//

#define LEN_NOMBRE_DE_RECURSO_COMPARTIDO  30
#define LEN_TIPO_DE_RECURSO_COMPARTIDO     4

function aNetRecursos_CMD(cEstacion)
local i,cFile,cTxt,cLine,nLines
local aRecursos := {}

   if !EMPTY(cEstacion)
      //cFile := cTempFile()
      //cFile := Tmp("Cmd_",".TXT")
      //WAITRUN("COMMAND.COM /C net view "+cEstacion+" > "+cFile ,0)
      cFile := RunCMD("net view "+cEstacion,.T.)
      if file(cFile)
         cTxt := MemoRead( cFile )
         nLines := MLCount( cTxt, LEN_LINE )//, nTabSize, lWrap )
         FOR i:=1 TO nLines
            cLine := MemoLine( cTxt, LEN_LINE, i)//, nTabSize, lWrap )
            if UPPER(SubStr(cLine,LEN_NOMBRE_DE_RECURSO_COMPARTIDO+1,LEN_TIPO_DE_RECURSO_COMPARTIDO))=="DISC"
               AADD(aRecursos,RTRIM(LEFT(cLine,LEN_NOMBRE_DE_RECURSO_COMPARTIDO)))
            endif
         NEXT
         FERASE(cFile)
      endif
   endif

Return aRecursos


y esta es mi propia implementacion del comando RunCMD
Code (fw): Select all Collapse
//----------------------------------------------------------------------------//
//Funcion RunCMD
//----------------------------------------------------------------------------//
FUNCTION RunCMD(cCmd,lReturnFileResult)
local cTmpFile, hTmp

   default lReturnFileResult := .F.

   cTmpFile:=Tmp("RunCMD_",".BAT")

   hTmp := FCREATE(cTmpFile,0)
   FWRITE(hTmp, cCmd + if(lReturnFileResult," > " + LEFT(cTmpFile,AT(".",cTmpFile)-1) + ".txt", "") )
   FCLOSE(hTmp)
   WaitRun(cTmpFile,0)
   FErase( cTmpFile )

return if(lReturnFileResult, LEFT(cTmpFile,AT(".",cTmpFile)-1) + ".txt", NIL)
//FIN Funcion RunCMD ----------------------------------------------------------------------------//


NOTA:
- Esta basada en el resultado de un comando DOS.
- En el foro vi otras opciones con CreateObject ( "wbemScripting.SwbemLocator" ), pero no lo puede hacer funcionar.

Rolando
Cochabamba, Bolivia

Continue the discussion