栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

VB.NET通过Win32API完成访问共享文件夹功能中

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

VB.NET通过Win32API完成访问共享文件夹功能中

VB.NET通过Win32API完成访问共享文件夹功能

VB.NET通过Win32API完成访问共享文件夹功能

VB.NET实现访问网络共享文件夹,使用 WNetAddConnection2A 和 WNetCancelConnection2A。

Imports System
Public Class clsNetworkConnect

#Region "----- Win32API关联 常量 -----"
    '------------------------------------------------ 
    ' 访问共享文件夹 常量 
    '------------------------------------------------ 
    Public Const RESOURCE_CONNECTED = &H1
    Public Const RESOURCE_GLOBALNET = &H2
    Public Const RESOURCE_REMEMBERED = &H3
    Public Const RESOURCE_RECENT = &H4
    Public Const RESOURCE_CONTEXT = &H5

    Public Const RESOURCETYPE_ANY = &H0
    Public Const RESOURCETYPE_DISK = &H1
    Public Const RESOURCETYPE_PRINT = &H2
    Public Const RESOURCETYPE_RESERVED = &H8
    Public Const RESOURCETYPE_UNKNOWN = &HFFFFFFFF

    Public Const RESOURCEUSAGE_CONNECTABLE = &H1
    Public Const RESOURCEUSAGE_CONTAINER = &H2
    Public Const RESOURCEUSAGE_NOLOCALDEVICE = &H4
    Public Const RESOURCEUSAGE_SIBLING = &H8
    Public Const RESOURCEUSAGE_ATTACHED = &H10
    Public Const RESOURCEUSAGE_ALL = RESOURCEUSAGE_CONNECTABLE + RESOURCEUSAGE_CONTAINER + RESOURCEUSAGE_ATTACHED
    Public Const RESOURCEUSAGE_RESERVED = &H80000000

    Public Const RESOURCEDISPLAYTYPE_GENERIC = &H0
    Public Const RESOURCEDISPLAYTYPE_DOMAIN = &H1
    Public Const RESOURCEDISPLAYTYPE_SERVER = &H2
    Public Const RESOURCEDISPLAYTYPE_SHARE = &H3
    Public Const RESOURCEDISPLAYTYPE_FILE = &H4
    Public Const RESOURCEDISPLAYTYPE_GROUP = &H5
    Public Const RESOURCEDISPLAYTYPE_NETWORK = &H6
    Public Const RESOURCEDISPLAYTYPE_ROOT = &H7
    Public Const RESOURCEDISPLAYTYPE_SHAREADMIN = &H8
    Public Const RESOURCEDISPLAYTYPE_DIRECTORY = &H9
    Public Const RESOURCEDISPLAYTYPE_TREE = &HA
    Public Const RESOURCEDISPLAYTYPE_NDSCONTAINER = &HB

    Public Const CONNECT_UPDATE_PROFILE = &H1

    '<ErrCodes Connect/DisConnect>
    Public Const ERROR_ACCESS_DENIED As Integer = 5                     '访问被拒绝。
    Public Const ERROR_BAD_DEV_TYPE As Integer = 66                     '网络资源的类型不正确。
    Public Const ERROR_BAD_NET_NAME As Integer = 67                     '找不到网络名称。
    Public Const ERROR_ALREADY_ASSIGNED As Integer = 85                 '本地设备已经被使用了。
    Public Const ERROR_INVALID_PASSWORD As Integer = 86                 'PASSWORD错误。
    Public Const ERROR_BUSY As Integer = 170                            '请求的资源正在被使用。
    Public Const ERROR_BAD_DEVICE As Integer = 1200                     '指定的设备名无效。 
    Public Const ERROR_DEVICE_ALREADY_REMEMBERED As Integer = 1202      '这个本地路径已经被其他的网络链接资源占用。
    Public Const ERROR_NO_NET_OR_BAD_PATH As Integer = 1203             '没有连接网络或路径错误。
    Public Const ERROR_BAD_PROVIDER As Integer = 1204                   '指定的网络名无效。 
    Public Const ERROR_CANNOT_OPEN_PROFILE As Integer = 1205            '网络连接配置文件无法打开。 
    Public Const ERROR_BAD_PROFILE As Integer = 1206                    '网络连接配置文件有损坏。 
    Public Const ERROR_EXTENDED_ERROR As Integer = 1208                 '发生了扩展错误。 
    Public Const ERROR_SESSION_CREDENTIAL_CONFLICT As Integer = 1219    '不允许多数用户同时连接服务器的共享文件夹。
    Public Const ERROR_NO_NETWORK As Integer = 1222                     '没有网络。
    Public Const ERROR_CANCELLED As Integer = 1223                      '操作被用户取消。

    '<ErrCodes DisConnect Only>
    Public Const ERROR_DEVICE_IN_USE As Integer = 2404                  '这个设备上的活动进程正在使用中,无法切断。 
    Public Const ERROR_NOT_CONNECTED As Integer = 2250                  '这个网络无法连接。 
    Public Const ERROR_OPEN_FILES As Integer = 2401                     '网络连接的文件已经被打开。 

    Public Structure NETRESOURCE
        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

    '连接网络驱动器
    Public Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As Integer) As Integer

    '切断网络驱动器
    Public Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Integer, Optional ByVal fForce As Boolean = False) As Boolean

#End Region

#Region "----- メソッド -----"

    '<错误消息>
    Private m_strErrMsg As String


    Public Function Connect(ByVal strServer As String, _
                            ByVal strUser As String, _
                            ByVal strPassword As String) As Boolean

        Dim dwRet As Integer
        Dim objResource As NETRESOURCE

        '********************************
        '* 设定网络资源
        '********************************
        objResource.dwScope = RESOURCE_CONNECTED
        objResource.dwType = RESOURCETYPE_ANY
        objResource.dwDisplayType = RESOURCEDISPLAYTYPE_GENERIC
        objResource.dwUsage = RESOURCEUSAGE_CONNECTABLE
        objResource.lpComment = Nothing
        objResource.lpLocalName = Nothing  
        objResource.lpProvider = Nothing
        objResource.lpRemoteName = strServer

        '*******************
        '* 通过API连接 
        '*******************
        dwRet = WNetAddConnection2(objResource, strPassword, strUser, 0)

        '*******************
        '* 确认连接错误
        '*******************	
	If dwRet <> 0 Then
            Select Case dwRet
                Case ERROR_ACCESS_DENIED
                    m_strErrMsg = "访问被拒绝。"                                
                Case ERROR_BAD_DEV_TYPE
                    m_strErrMsg = "网络资源的类型不正确。
                Case ERROR_BAD_NET_NAME
                    m_strErrMsg = "找不到网络名称。"
                Case ERROR_ALREADY_ASSIGNED
                    m_strErrMsg = "本地设备已经被使用了。"
                Case ERROR_INVALID_PASSWORD
                    m_strErrMsg = "PASSWORD错误。"
                Case ERROR_BUSY
                    m_strErrMsg = "请求的资源正在被使用。"
                Case ERROR_BAD_DEVICE
                    m_strErrMsg = "指定的设备名无效。"
                Case ERROR_DEVICE_ALREADY_REMEMBERED
                    m_strErrMsg = "这个本地路径已经被其他的网络链接资源占用。"
                Case ERROR_NO_NET_OR_BAD_PATH
                    m_strErrMsg = "没有连接网络或路径错误。"
                Case ERROR_BAD_PROVIDER
                    m_strErrMsg = "指定的网络名无效。"
                Case ERROR_CANNOT_OPEN_PROFILE
                    m_strErrMsg = "网络连接配置文件无法打开。"
                Case ERROR_BAD_PROFILE
                    m_strErrMsg = "网络连接配置文件有损坏。"
                Case ERROR_EXTENDED_ERROR
                    m_strErrMsg = "发生了扩展错误。"
                Case ERROR_SESSION_CREDENTIAL_CONFLICT
                    m_strErrMsg = "不允许多数用户同时连接服务器的共享文件夹。"
                Case ERROR_NO_NETWORK
                    m_strErrMsg = "没有网络。"
                Case ERROR_CANCELLED
                    m_strErrMsg = "操作被用户取消。"
                Case Else
                    m_strErrMsg = "发生了不明错误。"
            End Select
            ErrorInfo = m_strErrMsg
            Return False

        End If

        Return True

    End Function


    Public Function Disconnect(ByVal strServer As String) As Boolean

        Dim dwRet As Integer

        '*******************
        '* 通过API切断 
        '*******************
        dwRet = WNetCancelConnection2(strServer, 0, False)

        '*******************
        '* 确认切断错误
        '*******************                 
        If dwRet <> 0 Then
            Select Case dwRet
                Case ERROR_DEVICE_IN_USE
                    m_strErrMsg = "这个设备上的活动进程正在使用中,无法切断。"
                Case ERROR_NOT_CONNECTED
                    m_strErrMsg = "这个网络无法连接。"
                Case ERROR_OPEN_FILES
                    m_strErrMsg = "网络连接的文件已经被打开。"
                Case Else
                    m_strErrMsg = "不明错误。"
            End Select

            Return False
        End If

        Return True

    End Function

    Public Function GetLastError() As String

        Return m_strErrMsg

    End Function

#End Region

End Class
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955399.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号