Declaramos en un módulo :
Declare Function WNetAddConnection2 Lib "mpr.dll" Alias _
"WNetAddConnection2A" (lpNetResource As NETRESOURCE, _
ByVal lpPassword As String, ByVal lpUserName As String, _
ByVal dwFlags As Long) As Long
Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias _
"WNetCancelConnection2A" (ByVal lpName As String, _
ByVal dwFlags As Long, ByVal fForce As Long) As Long
Type NETRESOURCE
dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
lpLocalName As String
lpRemoteName As String
lpComment As String
lpProvider As String
End Type
Public Const NO_ERROR = 0
Public Const CONNECT_UPDATE_PROFILE = &H1 'para que "recuerde" la conexión
' Se incluyen todas las constantes definidas para NETRESOURCE,
' no sólo las usadas en este ejemplo
Public Const RESOURCETYPE_DISK = &H1
Public Const RESOURCETYPE_PRINT = &H2
Public Const RESOURCETYPE_ANY = &H0
Public Const RESOURCE_CONNECTED = &H1
Public Const RESOURCE_REMEMBERED = &H3
Public Const RESOURCE_GLOBALNET = &H2
Public Const RESOURCEDISPLAYTYPE_DOMAIN = &H1
Public Const RESOURCEDISPLAYTYPE_GENERIC = &H0
Public Const RESOURCEDISPLAYTYPE_SERVER = &H2
Public Const RESOURCEDISPLAYTYPE_SHARE = &H3
Public Const RESOURCEUSAGE_CONNECTABLE = &H1
Public Const RESOURCEUSAGE_CONTAINER = &H2
' Constantes de error
' En la conexión
Public Const ERROR_ACCESS_DENIED = 5& 'acceso denegado
Public Const ERROR_ALREADY_ASSIGNED = 85& 'la unidad ya está conectada a un recurso
Public Const ERROR_BAD_DEV_TYPE = 66& 'tipo dispositivo local y del recurso distintos
Public Const ERROR_BAD_DEVICE = 1200& 'el nombre local del dispositivo es inválido
Public Const ERROR_BAD_NET_NAME = 67& 'nombre de recurso inválido o no se encuentra
Public Const ERROR_BAD_PROFILE = 1206& 'formato perfil usuario no válido
Public Const ERROR_BAD_PROVIDER = 1204&
Public Const ERROR_BUSY = 170& 'servidor ocupado, reintentar
Public Const ERROR_CANCELLED = 1223& 'conexión cancelada por el usuario
Public Const ERROR_CANNOT_OPEN_PROFILE = 1205& 'no se puede abrir el perfil de usuario para procesar una conexión persistente
Public Const ERROR_DEVICE_ALREADY_REMEMBERED = 1202& 'ya existe una conexión persistente con la misma unidad local
Public Const ERROR_EXTENDED_ERROR = 1208& 'error específico de cada tipo de red
Public Const ERROR_INVALID_PASSWORD = 86& 'password incorrecta
Public Const ERROR_NO_NET_OR_BAD_PATH = 1203& 'la red no está arrancada
' En la desconexión
' Ya definidas
'ERROR_BAD_PROFILE
'ERROR_CANNOT_OPEN_PROFILE
'ERROR_EXTENDED_ERROR
' Nuevas
Public Const ERROR_DEVICE_IN_USE = 2404& 'dispositivo en uso por un proceso activo
Public Const ERROR_OPEN_FILES = 2401& ' hay ficheros abiertos y no se indicó desconexión forzosa
Public Const ERROR_NOT_CONNECTED = 2250& 'no existe la conexión a eliminar
Para establecer las conexión de red :
Dim NetR As NETRESOURCE
Dim ErrInfo As Long
Dim MyPass, MyUser As String
NetR.dwScope = RESOURCE_GLOBALNET
NetR.dwType = RESOURCETYPE_DISK
NetR.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
NetR.dwUsage = RESOURCEUSAGE_CONNECTABLE
NetR.lpLocalName = "X:" ' Si no se define se hará una conexión sin dispositivo (no se verá en el explorer)
NetR.lpRemoteName = "\\NombreServidor\NombreRecursoCompartido"
' Si los argumentos MiUsuario y MiPassword son NULL, se usarán los de conexión del ' usuario. Si MiPassword es un string vacío no se empleará password
'Establecemos una conexión "persistente"
ErrInfo = WNetAddConnection2(NetR, MiPassword, MiUsuario, CONNECT_UPDATE_PROFILE)
If ErrInfo = NO_ERROR Then
MsgBox "Establecida conexión de red", vbInformation,"Recurso conectado"
Else
MsgBox "ERROR: " & ErrInfo & " - Conexión fallida",vbExclamation, "Recurso no conectado
End If
Para desconectarnos del recurso compartido :
Dim ErrInfo As Long
Dim strLocalName As String
' Debemos especificar el lpRemoteName o el lpLocalName. Si indicamos el nombre de recurso
' compartido se cerrarán todas las conexiones al mismo (aunque hubiera varias
' asignadas a distintas "letras de unidad"
'strLocalName = "\\NombreServidor\NombreRecursoCompartido"
strLocalName = "X:"
' Efecuamos la desconexión de manera "persistente".
' Si el último parámetro fuera
' true se desconectaría incluso si tenemos ficheros abiertos en el recurso
ErrInfo = WNetCancelConnection2(strLocalName, CONNECT_UPDATE_PROFILE, False)
If ErrInfo = NO_ERROR Then
MsgBox "Desconexión conseguida", vbInformation, "Recurso desconectado"
Else
MsgBox "ERROR: " & ErrInfo & " - Desconexión fallida", vbExclamation, "Recurso no desconectado"
End If