Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

saber nombre de recuso compartido

Estas en el tema de saber nombre de recuso compartido en el foro de Visual Basic clásico en Foros del Web. Hola genios. Tengo una funcion que busca el nombre de pc dentro de una red. El problema que surge es que me devuelve solo el ...
  #1 (permalink)  
Antiguo 07/02/2013, 10:29
 
Fecha de Ingreso: mayo-2008
Mensajes: 224
Antigüedad: 15 años, 11 meses
Puntos: 4
saber nombre de recuso compartido

Hola genios.

Tengo una funcion que busca el nombre de pc dentro de una red.
El problema que surge es que me devuelve solo el nombre de la pc y yo necesitaria el nombre de la pc y el nombre de la carpeta compartida.

dejo la funcion completa por si le sirve a otra persona

Código:
Podemos usar la función del API SHBrowseForFolder para selecionar uno de los ordenadores conectados a nuestra red.

Primero declaramos :

Private Const ERROR_SUCCESS As Long = 0
Private Const MAX_PATH As Long = 260
Private Const CSIDL_NETWORK As Long = &H12
Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000

Private Type BROWSEINFO 'BI
   hOwner As Long
   pidlRoot As Long
   pszDisplayName As String
   lpszTitle As String
   ulFlags As Long
   lpfn As Long
   lParam As Long
   iImage As Long
End Type


Private Declare Function SHBrowseForFolder Lib "shell32.dll" _
   Alias "SHBrowseForFolderA" _
  (lpBrowseInfo As BROWSEINFO) As Long

Private Declare Function SHGetSpecialFolderLocation _
   Lib "shell32.dll" _
  (ByVal hwndOwner As Long, _
   ByVal nFolder As Long, _
   pidl As Long) As Long

Emplearemos esta función auxiliar para tratar las cadenas devueltas por el API :

Function AsciiZ(texto As String) As String
'esta función se utiliza para devolver la parte del string
'hasta el primer chr(0). Las funciones del API suelen emplear
'un chr(0) para marcar el final de las cadenas de texto
Dim i As Long
i = InStr(texto, Chr(0))
If i = 0 Then
    AsciiZ = texto
Else
    AsciiZ = Left(texto, i - 1)
End If
End Function

Y luego esta función nos devolverá un nombre de máquina en notación UNC (\\NombreOrdenador) :

Private Function BrowseForComputers() As String
  'muestra sólo ordenadores
   Dim BI As BROWSEINFO
   Dim pidl As Long
   Dim sPath As String
   Dim pos As Integer

  'obtener el pidl de la carpeta 'Entorno de red'
   If SHGetSpecialFolderLocation(Me.hWnd, CSIDL_NETWORK, pidl) = ERROR_SUCCESS Then
     'rellenar la estructura limitando a ordenadores especificando
     'el pidl devuelto como pidl raíz
      With BI
         .hOwner = Me.hWnd
         .pidlRoot = pidl
         .pszDisplayName = Space$(MAX_PATH)
         .lpszTitle = "Seleccione un ordenador :"
         .ulFlags = BIF_BROWSEFORCOMPUTER
      End With
     'mostrar el diálogo de búsqueda.
      If SHBrowseForFolder(BI) <> 0 Then
         'se ha seleccionado un ordenador.
          BrowseForComputers = "\\" & AsciiZ(BI.pszDisplayName)
      End If
   End If
End Function
La tome de www.jrubi.com, respetando a su autor.
Funciona barbaro pero solo tomo el nombre de la pc y no su carpeta compartida. Como puedo modificar esta funcion??
Intente hacerlo por mi cuenta y termine en cualquier parte

Gracias de antemano!!!

Etiquetas: compartido, nombre
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:09.