Page 1 of 1

RED local - detectar pc's que la componen

PostPosted: Wed Jun 12, 2013 12:40 pm
by rolando
Buen día,

Quisiera automatizar una aplicación para que al iniciar detecte cuantas pc's hay conectadas en red local y el nombre de las mismas.

Estuve intentando con el testnet.prg de los samples y hay una función que edita las pc de la red local pero abriendo un dialog que permite seleccionar la/s pc a desconectar de red. Esta función es la WNetDisconnectDialog() y muestra algo así:

Image

Mi consulta es: ¿existe alguna función que me devuelva los nombres y los path de las pc que integran una red, mostrados tal como lo hace la función WNetDisconnectDialog() pero que puedan pasarse a un array?

Gracias.

Rolando :D

Re: RED local - detectar pc's que la componen

PostPosted: Wed Jun 12, 2013 1:22 pm
by cnavarro
Buenas tardes

Quizas este tema te pueda ayudar

http://forums.fivetechsupport.com/viewtopic.php?f=3&t=25827&p=141221#p141189

Un saludo

Re: RED local - detectar pc's que la componen

PostPosted: Wed Jun 12, 2013 4:13 pm
by sysctrl2
has probado:

el comando CMD

NET VIEW >T.TXT

guardad en un texto las pcs. en red.

saludos.

Re: RED local - detectar pc's que la componen

PostPosted: Wed Jun 12, 2013 10:30 pm
by rolando
Gracias por responder.

Cristóbal, lo del link que sugieres he probado con el .bat y se bloquea en W7 aún ejecutándolo como administrador.

César, así lo tengo implementado pero quería saber si existe alguna función en xHarbour, FWH ó 'C' para hacer esto sin necesidad de comandos DOS.

Rolando :D

Re: RED local - detectar pc's que la componen

PostPosted: Thu Jun 13, 2013 6:59 am
by colthop
Hola Rolando:

Yo tengo algo parecido y lo que hago es con:

aFil:=adrives()

Pongo en un array las unidades de la red incluyendo todas las unidades de disco y las de disco duro local. Y con:

netDisk()

Selecciono solo las que son de red. Y Con

netRmtName()

Se el nombre de que tiene en la Red. Luego con esta información puedes hacer la ventana.

Un saludo

Carlos

Re: RED local - detectar pc's que la componen

PostPosted: Thu Jun 13, 2013 11:32 am
by Antonio Linares
Rolando,

Aqui se explica como obtener un montón de información valiosa usando WMI:
http://www.activexperts.com/network-monitor/windowsmanagement/wmi/samples/os/#Win32_NetworkConnection.htm

Prueba este ejemplo:
Code: Select all  Expand view
#include "FiveWin.ch"

function Main()

   local oLoc := CreateObject ( "wbemScripting.SwbemLocator" )
   local oWMI := oLoc:ConnectServer()
   local aPCs := oWMI:ExecQuery( "Select * FROM Win32_NetworkLoginProfile" )
   local oPC
   
   MsgInfo( Len( aPCS ) )
   
   for each oPC in aPCs
      MsgInfo( oPC:Caption )
   next  
   

return nil


Mira toda la información que hay disponible para cada oPC:
Code: Select all  Expand view
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkLoginProfile",,48)
For Each objItem in colItems
    Wscript.Echo "AccountExpires: " & objItem.AccountExpires
    Wscript.Echo "AuthorizationFlags: " & objItem.AuthorizationFlags
    Wscript.Echo "BadPasswordCount: " & objItem.BadPasswordCount
    Wscript.Echo "Caption: " & objItem.Caption
    Wscript.Echo "CodePage: " & objItem.CodePage
    Wscript.Echo "Comment: " & objItem.Comment
    Wscript.Echo "CountryCode: " & objItem.CountryCode
    Wscript.Echo "Description: " & objItem.Description
    Wscript.Echo "Flags: " & objItem.Flags
    Wscript.Echo "FullName: " & objItem.FullName
    Wscript.Echo "HomeDirectory: " & objItem.HomeDirectory
    Wscript.Echo "HomeDirectoryDrive: " & objItem.HomeDirectoryDrive
    Wscript.Echo "LastLogoff: " & objItem.LastLogoff
    Wscript.Echo "LastLogon: " & objItem.LastLogon
    Wscript.Echo "LogonHours: " & objItem.LogonHours
    Wscript.Echo "LogonServer: " & objItem.LogonServer
    Wscript.Echo "MaximumStorage: " & objItem.MaximumStorage
    Wscript.Echo "Name: " & objItem.Name
    Wscript.Echo "NumberOfLogons: " & objItem.NumberOfLogons
    Wscript.Echo "Parameters: " & objItem.Parameters
    Wscript.Echo "PasswordAge: " & objItem.PasswordAge
    Wscript.Echo "PasswordExpires: " & objItem.PasswordExpires
    Wscript.Echo "PrimaryGroupId: " & objItem.PrimaryGroupId
    Wscript.Echo "Privileges: " & objItem.Privileges
    Wscript.Echo "Profile: " & objItem.Profile
    Wscript.Echo "ScriptPath: " & objItem.ScriptPath
    Wscript.Echo "SettingID: " & objItem.SettingID
    Wscript.Echo "UnitsPerWeek: " & objItem.UnitsPerWeek
    Wscript.Echo "UserComment: " & objItem.UserComment
    Wscript.Echo "UserId: " & objItem.UserId
    Wscript.Echo "UserType: " & objItem.UserType
    Wscript.Echo "Workstations: " & objItem.Workstations
Next

Re: RED local - detectar pc's que la componen

PostPosted: Thu Jun 13, 2013 11:34 am
by cnavarro
Muy, muy bueno
Gracias

Re: RED local - detectar pc's que la componen

PostPosted: Thu Jun 13, 2013 1:40 pm
by Adolfo
Un solo problema....

Desde Windows 7,8 a XP no hay como verlos en la red.

Como se soluciona.. con simples chorrocientos pasos.

Copiado de una web
-Los usuarios deben tener contraseña y no pueden dejarse en blanco, ademas:

-Debes tener activado "Compartir Archivos e Impresoras" en XP:

Inicio - Panel de Control - Firewall de Windows - Excepciones - Marca "Compartir Archivos e Impresoras"

Inicio - Panel de Control - Conexiones de Red - Boton derecho del raton sobre la conexion en cuestion - Propiedades - Marca "Compartir Impresoras y Archivos para redes Microsoft"

-Todos los usuarios deben logearse con nombre y contraseña en sus respectivos equipos al iniciar sesion

-Debes dar de alta en Windows XP al usuario de Windows 7 con el mismo nombre y contraseña que dicho usuario tienes en Windwos 7.

-Da de alta en Windows 7 al usuario de Windows XP con el mismo nombre y contraseña que dicho usuario tienes en Windwos XP.

-El grupo de trabajo debe llamarse igual en los equipos de la red

-La direcccion IP tienen que pertenecer al mismo rango

-La mascara debe ser la misma

-Ningun usuario puede denominarse igual que un equipo de la red

-Debes desmarcar la opcion de "uso compartido simple de archivos" tanto en Windows XP como en Windows 7.

En Windows XP Pro:

-Debes desmarcar la opcion (version Pro de XP) de "uso compartido simple de archivos":

(Panel de control, Opciones de carpeta, pestaña Ver, y desmarcar la casilla correspondiente "Utilizar uso compartido simple de archivos (recomendado)")

Para la version Home, podras acceder a dicha pantalla entrando en modo seguro.

En Windows 7:

Panel de Control - Iconos Grandes - Centro de Redes y Recursos compartidos - Cambiar configuracion de uso compartido avanzado - Solo comprobar, debe estar activado por defecto


No los he probado ,pero se los pase a un colega y segun su respuestas ,"le sirvio"

Re: RED local - detectar pc's que la componen

PostPosted: Thu Jun 13, 2013 5:13 pm
by rolando
Muchas gracias a todos por los aportes.

Siempre se aprende preguntando, sobre todo en este grandioso foro.

Saludos.

Rolando :D

Re: RED local - detectar pc's que la componen

PostPosted: Thu Jun 13, 2013 5:32 pm
by acuellar
Con este ejemplo muestra todas las PCs del GRUPO/DOMINIO

Code: Select all  Expand view

#include "FiveWin.ch"

function Main()
    LOCAL oAdoCommand,oAdoConnection,oRs,aPcs:={},cPcs:=""
   
   oAdoCommand:=CreateObject("ADODB.Command")
   oAdoConnection:=CreateObject("ADODB.Connection")
   oAdoConnection:Provider:="ADsDSOObject"
   oAdoConnection:Open("Active Directory Provider")
   oAdoCommand:ActiveConnection:=oAdoConnection
   oAdoCommand:CommandText:="Select name from 'LDAP://LOSTAJIBOSHOTEL' Where objectCategory='computer'" //LOSTAJIBOSHOTEL el nombre del GRUPO/DOMINIO
   oRs:=oAdoCommand:Execute()
   oRs:MoveFirst()
   DO WHILE !oRs:Eof()
       xPC:=Alltrim(oRs:Fields("Name"):Value)
         aAdd(aPcs,xPC)
         cPcs+=xPC+CRLF
       oRs:MoveNext()
   ENDDO
 ?cPcs

return nil
 


Saludos,

Adhemar