OOP no VB: classe para conectar-se a recurso em rede
Abaixo vai o código fonte para você adicionar a um módulo de classe nomeado CConexao e um exemplo de como usá-lo para acessar um diretório compartilhado na rede.
Adicione um módulo de classe ao seu projeto, nomeie a classe como CConexao e insira o código abaixo ao módulo.
Option Explicit
Private 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
Private Const NO_ERROR = 0
Private Const CONNECT_UPDATE_PROFILE = &H1
Private Const RESOURCETYPE_DISK = &H1
Private Const RESOURCETYPE_PRINT = &H2
Private Const RESOURCETYPE_ANY = &H0
Private Const RESOURCE_CONNECTED = &H1
Private Const RESOURCE_REMEMBERED = &H3
Private Const RESOURCE_GLOBALNET = &H2
Private Const RESOURCEDISPLAYTYPE_DOMAIN = &H1
Private Const RESOURCEDISPLAYTYPE_GENERIC = &H0
Private Const RESOURCEDISPLAYTYPE_SERVER = &H2
Private Const RESOURCEDISPLAYTYPE_SHARE = &H3
Private Const RESOURCEUSAGE_CONNECTABLE = &H1
Private Const RESOURCEUSAGE_CONTAINER = &H2
Private 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
Private Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long
'
Private NetR As NETRESOURCE
Public Conectado As Boolean
Public Function FazerConexao(Compartilhamento As String, Optional Conectar As Boolean = True, Optional Usuario As String = vbNullString, Optional PWD As String = vbNullString) As Boolean
10000 Dim ErrInfo As Long
10005 On Error GoTo ErrorHandler
10010 FazerConexao = False
10015 If Conectar Then
10020 NetR.dwScope = RESOURCE_GLOBALNET
10025 NetR.dwType = RESOURCETYPE_DISK
10030 NetR.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
10035 NetR.dwUsage = RESOURCEUSAGE_CONNECTABLE
10040 NetR.lpLocalName = vbNullString
10045 NetR.lpRemoteName = Compartilhamento
10050 ErrInfo = WNetAddConnection2(NetR, PWD, Usuario, CONNECT_UPDATE_PROFILE)
10055 If ErrInfo <> NO_ERROR Then
10060 MsgBox "Não foi possível fazer conexão de rede.", vbInformation, App.Title
10065 Err.Raise vbObjectError
10070 End If
10075 Conectado = True
10080 FazerConexao = True
10085 Else
'abaixo, se quiser forçar a desconexão mesmo que tenha
'alguém usando-a, use True no lugar de False
10090 ErrInfo = WNetCancelConnection2(Compartilhamento, CONNECT_UPDATE_PROFILE, False)
10095 If ErrInfo = NO_ERROR Then
10100 Conectado = False
10105 FazerConexao = True
10110 End If
10115 End If
10120 Exit Function
10125 ErrorHandler:
10130 Dim errnum As Long, errdesc As String, errsource As String
10135 errnum = Err.Number
10140 errdesc = Err.Description
10145 errsource = IIf(Left(Err.Source, 3) <> "em ", "em FazerConexao, linha: " & Erl, Err.Source)
10150 Err.Clear
10155 Err.Raise errnum, errsource, errdesc
End Function
Private Sub Class_Terminate()
On Error Resume Next
FazerConexao NetR.lpRemoteName, False
End Sub
Abaixo vai um exemplo de uso. Crie um novo projeto e adicione a classe CConexao a ele. No form1, inclua um botão de comando e o código abaixo. Onde está "\\Servidor\SharedDocs" modifique para um compartilhamento válido na sua rede. Se houver necessidade, informe a senha e identificação de usuário para o compartilhamento.
Option Explicit
Private conn As CConexao
Private Sub Command1_Click()
If conn Is Nothing Then
Set conn = New CConexao
End If
If conn.Conectado = False Then
conn.FazerConexao "\\Servidor\SharedDocs", True,
"MeuIddeUsuario", "MinhaSenha"
MsgBox Dir("\\Servidor\SharedDocs\*", vbNormal)
Else
Call conn.FazerConexao("\\Servidor\SharedDocs", False)
End If
End Sub