”
” 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
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 ……
Hola Cesar…
Mucho mas facil, My.Computer.FileSystem
Te dejo un ejemplo :
http://msmvps.com/blogs/peplluis/archive/2008/06/06/como-saber-las-unidades-logicas-que-corresponden-a-una-conexion-de-red.aspx
Saludos,
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