请问能通过 WNetAddConnection2 把已有的逻辑驱动器映射为网络驱动器吗???比如我的电脑中已经有C D E 盘我要用API把D盘映射为网络驱动器可以吗?(不使用NET.EXE  USE )
还有NET.EXE USE 是怎么实现的,谢谢

解决方案 »

  1.   

    设定/取消网络磁盘
      
    这是两个已经封装好的函数AddConnection和CancelConnection,可直接用來設定或是取消網路磁碟,而模組可以參考程式的部分使用方法如下:建立連線
    Function AddConnection(ByVal RemoteLocation As String, _
                                                ByVal LocalDriver As String, _ 
                                                ByVal Passwd As String, _ 
                                                ByVal UserName As String) As Boolean RemoteLocation  : 
          為網路磁碟機原始來源,格式為\\RemoteComputer\ShareDirectoryLocalDriver : 
          對應本機的磁碟機代號,如: "H:"Passwd:      存取網路磁碟機的Password,傳Null表示不用密碼UserName:      存取網路磁碟機的使用者代號這個函數成功時傳回True,否則為False例:   Call AddConnection("\\Shih\cmias", "x:", vbNullString, "cww")取消連線
    Function CancelConnection(ByVal LocalDriver As String, _
                               ByVal ForceClose As Boolean) As BooleanLocalDriver: 對應本機的磁碟機代號,如: "H:" ForceClose: True表示強迫結束連線,而不管有沒有程式正與之連線 函數執行成功時傳回True,否則為False例:
      Call CancelConnection("x:", True) 程式 '以下在.bas
    Option ExplicitType 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 TypeDeclare 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
    Declare Function WNetGetLastError Lib "mpr.dll" Alias "WNetGetLastErrorA" (lpError As Long, ByVal lpErrorBuf As String, ByVal nErrorBufSize As Long, ByVal lpNameBuf As String, ByVal nNameBufSize As Long) As LongPublic Const RESOURCE_PUBLICNET = &H2
    Public Const RESOURCETYPE_ANY = &H0
    Public Const RESOURCEDISPLAYTYPE_GENERIC = &H0
    Public Const RESOURCEUSAGE_CONNECTABLE = &H1
    Public Const CONNECT_UPDATE_PROFILE = &H1'-------------------------------------------------------------------------------------------------------
    Public Function AddConnection(ByVal RemoteLocation As String, ByVal LocalDriver As String, ByVal Passwd As String, ByVal UserName As String) As BooleanDim ne As NETRESOURCE, i As Long
    Dim errstr As String, errpriv As String, erno As Longne.dwDisplayType = RESOURCEDISPLAYTYPE_GENERIC
    ne.dwScope = RESOURCE_PUBLICNET
    ne.dwType = RESOURCETYPE_ANY
    ne.dwUsage = RESOURCEUSAGE_CONNECTABLE
    ne.lpComment = vbNullString
    ne.lpLocalName = LocalDriver
    ne.lpProvider = vbNullString
    ne.lpRemoteName = RemoteLocationi = WNetAddConnection2(ne, Passwd, UserName, 0)
    If i = 0 Then
       AddConnection = True
    Else
      AddConnection = False
      errstr = String(256, 0)
      errpriv = String(256, 0)
      i = WNetGetLastError(erno, errstr, 256, errpriv, 256)
      errstr = Left(errstr, InStr(1, errstr, Chr(0)) - 1)
      MsgBox errstr, vbCritical
    End If
    End Function
    '-------------------------------------------------------------------------------------------------------
    Public Function CancelConnection(ByVal LocalDriver As String, ByVal ForceClose As Boolean) As Boolean
    Dim i As Long
    Dim errstr As String, errpriv As String, erno As Longi = WNetCancelConnection2(LocalDriver, 0, IIf(ForceClose, 1, 0))
    If i = 0 Then
       CancelConnection = True
    Else
      CancelConnection = False
      errstr = String(256, 0)
      errpriv = String(256, 0)
      i = WNetGetLastError(erno, errstr, 256, errpriv, 256)
      errstr = Left(errstr, InStr(1, errstr, Chr(0)) - 1)
      MsgBox errstr, vbCritical
    End IfEnd Function 
      

  2.   

    一个例子:
    http://vip.6to23.com/NowCan1/code/vs0205lj.zip
      

  3.   

    好象不能映射呀我的本地硬盘C  D  E 三个我要把D盘映射为网络驱动器,做不到呀
      

  4.   

    Private Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long
    Private Declare Function WNetCancelConnection Lib "mpr.dll" Alias "WNetCancelConnectionA" (ByVal lpszName As String, ByVal bForce As Long) As LongPrivate Sub Command1_Click()
    Dim Ret As Long
       Ret = WNetAddConnection(Text1.Text, "", Combo1.Text)
       If Ret = 0 Then
            Combo1.RemoveItem Combo1.ListIndex
            Combo1.ListIndex = 0
            MsgBox "   影射成功 !!   "
            
            Unload Me
       Else
            Drive1.Refresh
            MsgBox "影射失败,请检查路径是否正确"
       End If
    End SubPrivate Sub Command2_Click()
        Unload Me
    End Sub
    Private Sub Form_Load()
    Dim i As Integer
    Dim j As Integer
        For i = 0 To 25
            Combo1.AddItem Chr(65 + i) & ":"
        Next
        For i = 0 To Drive1.ListCount - 1
            j = ComIndex(Drive1.List(i))
            If j <> -1 Then Combo1.RemoveItem j
        Next
        Combo1.ListIndex = 0
    End SubPublic Function ComIndex(ByVal DriveName As String)
    Dim j As Integer
        For j = 0 To Combo1.ListCount - 1
            If UCase(Mid(DriveName, 1, 1)) = Mid(Combo1.List(j), 1, 1) Then
                ComIndex = j
                Exit Function
            End If
        Next
        ComIndex = -1
    End Function