Page 1 of 1

Requerimiento de funcion: Equipos del grupo de trabajo

Posted: Wed Aug 21, 2013 1:25 pm
by RSalazarU
Amigos del foro:

Necesito una funcion que me que me devuelva los "equipos del grupo de trabajo" y los recursos compartidos que tienen

aNetName() -> {"Server","Term1","Term2"}
aNetRecursos("Server") -> {"Compartido","Datos"}

Si alguien lo ha desarrollado me podria dar una mano, por favor...

Lo necesito para mejorar la funcion cFWGetDir()
http://forums.fivetechsupport.com/viewt ... =6&t=26997

De antemano, muchas gracias.

Atentamente,

Rolando
Cochabamba, Bolivia

Re: Requerimiento de funcion: Equipos del grupo de trabajo

Posted: Wed Aug 21, 2013 2:38 pm
by WilliamAdami
hola , segue mi function que mostra as unidades , acho que lhe servirá.

Saludos

William


Code: Select all


Function qualcamired
 Local oDlg101,oWnd,ncodigo,cestacao,nquantas,ocoment,odlg2
 local volta:="",obrw,area:=select()

 nquantas :=0

 ferase("carimp.dbf")

 DbCreate( "CARIMP", { { "QUANTAS" , "N", 04, 0 },;
 { "NOME_IMP" , "C", 14, 0 },;
 { "ESTACAO" , "C", 23, 0 },;
 { "COMENTARIO", "C", 30, 0 } } )

 if OpenFile( "carimp","carimp", 1, .F. )

 endif

 WAITRUN("COMMAND.COM /C net view > estacao.txt" ,0 )

 DbCreate( "CARTES", { { "TEXTO", "C", 100, 0 } } )

 if OpenFile( "cartes","cartes", 1, .F. )

 endif

 APPEND FROM estacao.txt SDF

 dbselectarea("CARTES")
 dbgotop()

 Do while !eof()

 if substr(CARTES->texto,1,2)#'\\'
 dbskip(1)
 loop
 endif

 dbselectarea('CARIMP')

 cestacao :=substr(CARTES->texto,1,23)

 ferase("ESTACAO.TXT")

 WAITRUN("COMMAND.COM /C net view "+cestacao+" > estacao1.txt",0 )

 DbCreate( "CARTIM", { { "TEXTO", "C", 100, 0 } } )

 if OpenFile( "cartim","cartim", 2, .F. )

 endif

 APPEND FROM estacao1.txt SDF

 dbselectarea("CARTIM")
 dbgotop()

 Do while !eof()

 if substr(CARTIM->texto,14,4)#'Disc'.AND.substr(CARTIM->texto,14,4)#'Impr'
 dbskip(1)
 loop
 else
 if substr(CARTIM->texto,14,4)<>'Disc'
 ocoment:="Impressora"
 else
 ocoment:="Disco"
 endif
 endif

 dbselectarea('CARIMP')

 append blank

 nquantas++

 replace CARIMP->quantas with nquantas
 replace CARIMP->estacao with substr(CARTES->texto,1,23)
 replace CARIMP->nome_imp with '\'+substr(CARTIM->texto,1,13)
 replace CARIMP->comentario with ocoment

 dbselectarea('CARTIM')
 dbskip(1)

 Enddo

 dbselectarea('CARTIM')
 dbclosearea('CARTIM')
 ferase('CARTIM.DBF')

 dbselectarea('CARTES')
 dbskip(1)

 Enddo

 dbselectarea('CARTES')
 dbclosearea('CARTES')
 ferase('CARTES.DBF')
 ferase('ESTACAO.TXT')
 ferase('ESTACAO1.TXT')

 dbselectarea('CARIMP') 
 go top

 DEFINE DIALOG oDlg2 RESOURCE "REDE" TITLE "COMPONENTES DA REDE" 

 odlg2:lhelpicon:=.f.

REDEFINE LISTBOX obrw FIELDS carimp->NOME_IMP, ; 
 carimp->ESTACAO, ;
 carimp->COMENTARIO ;
 HEADERS OemToAnsi( "NOME" ), ;
 OemToAnsi( "ESTACAO" ), ;
 OemToAnsi( "DESCRICAO" ) ;
 COLOR CLR_BLACK, rgb(238,221,130) ;
 ID 101 ;
 OF oDlg2 ; 
 ON DBLCLICK (volta:=rtrim(carimp->estacao)+rtrim(carimp->nome_imp),odlg2:end())

 obrw:bKeyChar := {|nK| if( nK==VK_RETURN, (volta:=rtrim(carimp->estacao)+rtrim(carimp->nome_imp),odlg2:end()) ,NIL)}

 activate dialog odlg2 centered 

 dbclosearea("carimp") 

 select(area)


 Return volta





Re: Requerimiento de funcion: Equipos del grupo de trabajo

Posted: Wed Aug 21, 2013 7:51 pm
by RSalazarU
Willian:

Gracias por responder.

Lo implemente asi:

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()
      WAITRUN("COMMAND.COM /C net view > "+cFile ,0)
      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()
      WAITRUN("COMMAND.COM /C net view "+cEstacion+" > "+cFile ,0)
      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

 
Esto quedara asi por el momento, no quisiera usar WAITRUN(..).

Ahora lo usare en la funcion cFWGetDir()

Atentamente,

Rolando
Cochabamba, Bolivia.