Page 1 of 1

Ver equipos en la red

Posted: Thu Nov 30, 2017 3:23 pm
by Jorge Jaurena
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

Re: Ver equipos en la red

Posted: Thu Nov 30, 2017 4:40 pm
by karinha

Re: Ver equipos en la red

Posted: Fri Dec 01, 2017 10:07 pm
by RSalazarU
Jorge:

Creo que estos es lo que estas buscando:

Code: Select all

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

#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: Select all

//----------------------------------------------------------------------------//
//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