Ver equipos del grupo de trabajo con un API

25/03/2005 - 21:45 por Mario Esquivel | Informe spam
Hola: necesito "Ver equipos del grupo de trabajo", lo mismo que se ve con el
explorador de windows. Alguien me puede decir donde encontrar una API una
clase WMI, o algún otro recurso que me dé esa información.

Utilizo VFP 8

Gracias a todos

Mario Esquivel
Paraguay

Preguntas similare

Leer las respuestas

#1 Andrés Giovvani Lara
26/03/2005 - 18:04 | Informe spam
Hola que tal mira yo apenas estoy aprendiendo sobre vfp pero pues si se
puede hacer eso la API ya la tiene el so solo necesitas conocer las
funciones de las apis en internet encuentras mucho sobre las apis yo
comenenze a experimentar con las apis sin saber de todas con vb y apendi
muchas cosas asi que te recomiendo agas lo mismo con eso que necesitas.


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#2 Mario Esquivel
26/03/2005 - 18:19 | Informe spam
Gracias Andrés

ya recorrí los controles en PortalFox y no pude encontrar un control que me
dé lo que estoy necesitando. lo expuse al grupo por que tal vez alguien sepa
exactamente el recurso que debo utilizar.

no nos responden todavia solo por que todos estan en misa, resando por
semana santa, pero después de unos cuantos rosarios nos van a respondes. ya
veras!

saludos

Mario

"Andrés Giovvani Lara" escribió en el mensaje
news:
Hola que tal mira yo apenas estoy aprendiendo sobre vfp pero pues si se
puede hacer eso la API ya la tiene el so solo necesitas conocer las
funciones de las apis en internet encuentras mucho sobre las apis yo
comenenze a experimentar con las apis sin saber de todas con vb y apendi
muchas cosas asi que te recomiendo agas lo mismo con eso que necesitas.


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#3 Jorge Useche
27/03/2005 - 23:39 | Informe spam
En la pagina http://www.mentalis.org/index2.shtml o www.allapi.net,
puedes encontrar una lista bastante completa de las apis de windows, a
pesar de que ésta página esta bastante orientada hacia VB puedes adaptar
el codigo fuente a VFP sin problemas.

inclusive puedes descargar una guia y un visor de apis donde aparecen
los parametros que debes utilizar para invocar a las funciones que desees
utilizar.

saludos cordiales.

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
Respuesta Responder a este mensaje
#4 CesarZ
29/03/2005 - 01:18 | Informe spam
Puede servirte esta función
Coloca los nombres de los recursos compartidos de red e impresoras en una
matriz y después devuelve el número de recursos.

?ANETRESOURCES(usuarios,'grupored',0)

Salu2
Respuesta Responder a este mensaje
#5 Jorge Useche
15/04/2005 - 23:25 | Informe spam
En el programa debes invocar las funciones de:

wsock32
*gethostbyaddr (el meollo del asunto/la principal)
*WSACleanup
*WSAStartup
kernel32
* lstrlenA
*CopyMemory

te puedes apoyar un control winsock (LocalIp) y/o en otro api para
obtener la dirección ip del equipo que va a interrogar a la red, por
ejemplo si retorna 10.196.4.110 podriamos buscar los nombres de los otros
equipos apoyandonos en la tipologia de la red (segun su mascara de
sub-red), por ejemplo si la mascara de sub-red es 255.255.255.0, debemos
suponer que los otros equipos deben estar entre 10.196.4.0 y 10.196.4.255
este rango de direcciones lo podemos recorrer con un ciclo for y luego
pedirle al api que nos transforme la ip en el nombre del equipo (host).

ejemplo para calcular la direccion en decimal para invocar gethostname

10.196.4.110

segmentos :
A
B6
C=4
D0

Direccion = (D*2^24) +(C*2^16)+(B*2^8)+(A*2^0)


este codigo fuente lo encontre en internet, solo hay que ajustarlo de vb a
vfp, pero no he tenido tiempo.sin embargo pueden guiarse por el.

poner esto en el valid de un boton (y traducilo a fox, of course...)
en este ejemplo se busca 10 equipos desde 10.196.4.0 a 10.196.4.10, pueden
ser mas, pero toma mas tiempo.

Dim A As Integer
Dim B As Integer
Dim C As Integer
Dim D As Integer

Dim Direccion As Long

Dim Equipos_Encontrados(256) As String

A = 10
B = 196
C = 4
D = 110

*** recuerden que las direcciones ip son a.b.c.d

For D = 0 To 10
Direccion = (D * 2 ^ 24) + (C * 2 ^ 16) + (B * 2 ^ 8) + (A * 2 ^ 0)
Equipos_Encontrados(D) = GetHostName(Direccion)
Text1.Text = D
DoEvents
Next D
For D = 0 To 10
If Len(Equipos_Encontrados(D)) > 0 Then
MsgBox Equipos_Encontrados(D) & "(" & A & "." & B & "." & C &
"." & D & ")"
End If
Next D


la funcion invocada GetHostName, la pueden poner en una clase o en un prg
y traducirla a vfp, la anexo...


'In a module
Public Const MIN_SOCKETS_REQD As Long = 1
Public Const WS_VERSION_REQD As Long = &H101
Public Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF&
Public Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF&
Public Const SOCKET_ERROR As Long = -1
Public Const WSADESCRIPTION_LEN = 257
Public Const WSASYS_STATUS_LEN = 129
Public Const MAX_WSADescription = 256
Public Const MAX_WSASYSStatus = 128
Public Type WSAData
wVersion As Integer
wHighVersion As Integer
szDescription(0 To MAX_WSADescription) As Byte
szSystemStatus(0 To MAX_WSASYSStatus) As Byte
wMaxSockets As Integer
wMaxUDPDG As Integer
dwVendorInfo As Long
End Type
Declare Function WSACleanup Lib "WSOCK32" () As Long
Declare Function WSAStartup Lib "WSOCK32" (ByVal wVersionRequired As Long,
lpWSADATA As WSAData) As Long
Declare Function gethostbyaddr Lib "wsock32.dll" (haddr As Long, ByVal
hnlen As Long, ByVal addrtype As Long) As Long
Declare Function lstrlenA Lib "kernel32" (ByVal Ptr As Any) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As
Any, hpvSource As Any, ByVal cbCopy As Long)

***ojo aqui. esta es la funcion principalque va a transformar la
direccion ip en el nombre del equipo.

Public Function GetHostName(ByVal Address As Long) As String
Dim lLength As Long, lRet As Long
If Not SocketsInitialize() Then Exit Function
lRet = gethostbyaddr(Address, 4, AF_INET)
If lRet <> 0 Then
CopyMemory lRet, ByVal lRet, 4
lLength = lstrlenA(lRet)
If lLength > 0 Then
GetHostName = Space$(lLength)
CopyMemory ByVal GetHostName, ByVal lRet, lLength
End If
Else
GetHostName = ""
End If
SocketsCleanup
End Function


Public Function HiByte(ByVal wParam As Integer)
HiByte = wParam \ &H100 And &HFF&
End Function
Public Function LoByte(ByVal wParam As Integer)
LoByte = wParam And &HFF&
End Function
Public Sub SocketsCleanup()
If WSACleanup() <> ERROR_SUCCESS Then
MsgBox "Socket error occurred in Cleanup."
End If
End Sub
Public Function SocketsInitialize() As Boolean
Dim WSAD As WSAData
Dim sLoByte As String
Dim sHiByte As String
If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then
MsgBox "The 32-bit Windows Socket is not responding."
SocketsInitialize = False
Exit Function
End If
If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then
MsgBox "This application requires a minimum of " &
CStr(MIN_SOCKETS_REQD) & " supported sockets."
SocketsInitialize = False
Exit Function
End If
If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or (LoByte(WSAD.wVersion)
= WS_VERSION_MAJOR And HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then
sHiByte = CStr(HiByte(WSAD.wVersion))
sLoByte = CStr(LoByte(WSAD.wVersion))
MsgBox "Sockets version " & sLoByte & "." & sHiByte & " is not
supported by 32-bit Windows Sockets."
SocketsInitialize = False
Exit Function
End If
'must be OK, so lets do it
SocketsInitialize = True
End Function


esta solucion es un poco "primitiva" porque es algo lenta pero
funciona y puede ser el punto de partida para otras MUCHO MEJORES y MAS
VELOCES. pero lo que se pretendia se logra y solo queria guiarlos un
poco


Saludos y gracias a www.allapi.net

JAUP



PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida