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