Agregar una conexion de red


” Ejemplo de utilizacion de WNetConnection
” Correspondiente al ejemplo de : http://support.microsoft.com/kb/173011/es
” Adaptado a VB9/Vista  y complementando la respuesta del post
” http://forums.microsoft.com/MSDN-ES/ShowPost.aspx?PostID=3423382&SiteID=11

” En este ejemplo las variables lpLocalName lpRemoteName se asignan desde
” el codigo, para asignarlos dinamicamente podeis usar un listbox & textbox.

” Si os conectais a un recurso de servidor con un Usuario / Clave distinto
” distinto del utilizado para iniciar la session, debereis reasignar
” las variables ‘Usuario’ y ‘Clave’.


Public Class Form1
    Private MiRdR As New RecursoDeRed
   
    ‘ Conectar un recurso de RED
       
    Private Sub Conectar()
        ‘Definir el tipo de conexión
        ‘Segun documentacion del API
        MiRdR.dwScope = Recurso.CONNECTED
        MiRdR.dwType = Recurso_Tipo.DISK
        MiRdR.dwDisplayType = Recurso_TipoVista.SHARE
        MiRdR.dwUsage = Recurso_TipoUso.CONNECTABLE

        ‘Definir letra de unidad y nombre del recurso
        MiRdR.lpLocalName = “Z:”
        MiRdR.lpRemoteName = “\\servidor\recurso
        MiRdR.lpComment = “** Mi Nueva Conexion**”
        MiRdR.lpProvider = “”

        ‘Si las credenciales son diferentes a las actuales
        ‘Sustituir por las adecuadas
        Dim Usuario = vbNullString  ‘Nombre de usuario
        Dim Clave = vbNullString    ‘Clave de acceso

        ‘Llamar a la funcion AñadirUnidad para WNetAddConnection2A
        ‘CONNECT_UPDATE_PROFILE = &H1
        MessageBox.Show( _
             CodigoError( _
              AñadirUnidad(MiRdR, Clave, Usuario, &H1)), _
              “Conectando…” + MiRdR.lpLocalName + ” a “ + MiRdR.lpRemoteName)
    End Sub
   
    ‘ Desconectar un recurso de red
   
    Private Sub Desconectar()
        MiRdR.lpLocalName = “Z:”
        ‘CONNECT_UPDATE_PROFILE = &H1
        If QuitarUnidad(MiRdR.lpLocalName, &H1, False) = 0 Then
            MessageBox.Show(“La unidad ha sido desconectada.”, _
             “Desconectando…” + MiRdR.lpLocalName)
        Else
            MessageBox.Show(“Fallo en la desconexion del dispositivo”, _ 
             “ERROR! Desconectando…”)
        End If
    End Sub
   
    ‘ Añadir los botones de Conectar/Desconectar
   
    Private Sub Form1_Load() Handles Me.Load
        Me.Text = “Conectar unidades de Red”
        Dim BotonDeConectar As New Button
        BotonDeConectar.Text = “Conectar”
        BotonDeConectar.Dock = DockStyle.Bottom
        AddHandler BotonDeConectar.Click, AddressOf Conectar
        Dim BotonDeCancelar As New Button
        BotonDeCancelar.Text = “Desconectar”
        BotonDeCancelar.Dock = DockStyle.Bottom
        AddHandler BotonDeCancelar.Click, AddressOf Desconectar

        Me.Controls.AddRange(New Control() {BotonDeConectar, BotonDeCancelar})
    End Sub
End Class


‘ Definicion y Referencias a la libreria mrp.dll
‘ para llamar a las funciones de WNetConnection, Add y Cancel


Module WNet
    Declare Function AñadirUnidad Lib “mpr.dll” Alias “WNetAddConnection2A” (ByRef lpRecursoDeRed As RecursoDeRed, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Long) As Integer
    Declare Function QuitarUnidad Lib “mpr.dll” Alias “WNetCancelConnection2A” (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Integer
   
    ‘ Estructura para llamar a la funcion de añadir
   
    Structure RecursoDeRed
        Public dwScope As Integer
        Public dwType As Integer
        Public dwDisplayType As Integer
        Public dwUsage As Integer
        Public lpLocalName As String
        Public lpRemoteName As String
        Public lpComment As String
        Public lpProvider As String
    End Structure
   
    ‘ Definir el recurso
   
    Enum Recurso
        CONNECTED = &H1
        REMEMBERED = &H3
        GLOBALNET = &H2
    End Enum
   
    ‘ Definir el tipo
   
    Enum Recurso_Tipo
        DISK = &H1
        PRINT = &H2
        ANY = &H0
    End Enum
   
    ‘ Definir la vista
   
    Enum Recurso_TipoVista
        DOMAIN = &H1
        GENERIC = &H0
        SERVER = &H2
        SHARE = &H3
    End Enum
   
    ‘ Definir el uso
   
    Enum Recurso_TipoUso
        CONNECTABLE = &H1
        CONTAINER = &H2
    End Enum
   
    ‘ Asignar codigos de retorno errores
   
    Function CodigoError(ByVal Codigo As Integer) As String
        Select Case Codigo
            Case 0 : Return “La unidad se agrego correctamente.”
           
Case 5 : Return “Acceso denegado!”
            Case 66 : Return “El tipo de dispositivo, no es correcto.”
            Case 67 : Return “El nombre de red, no es correcto.”
            Case 85 : Return “La unidad ya esta asignada!”
            Case 86 : Return “La clave de acceso no es valida!”
            Case 170 : Return “Ocupado!”
            Case 1200 : Return “Dispositivo Incorrecto.”
            Case 1202 : Return “El dispositivo se encuentra registrado”
            Case 1203 : Return “Sin red o ruta incorrecta!”
            Case 1204 : Return “El suministrador es Incorrecto.”
            Case 1205 : Return “No se puede abrir el perfil”
            Case 1206 : Return “El perfil es Incorrecto.”
           
Case 1208 : Return “Error extendido”
            Case 1223 : Return “Cancelado!”
            Case Else
                Return “ERROR, Codigo desconocido:” + Codigo.ToString
        End Select
    End Function

End Module

3 Replies to “Agregar una conexion de red”

  1. Hola PepLluis,

    Muy buen articulo, pero tengo una pregunta, existe alguún miembro en las clases del namespace IO, que me retorne la ruta total de una unidad de red.

    Mil gracias por la atención prestada ……

  2. Hola Cesar, queria saber si se puede expulsar un dispositivo USB en lugar de un recurso de red, si se puede, me podrias explicar como hacerlo. Gracias

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.