Trucos Seleccionar un ordenador de la red

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



Trucos Trucos

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com