SP1:如果9x和2k不一样,那么两种都要。
    发送邮件时主题最好是"Come From CSDN",以免被我勿删

解决方案 »

  1.   

    用FSO对象,和访问本地文件没有什么区别
    //1列出sharedir的内容:
    首先引用Microsoft Scripting Runtime
    窗体上一个treeview,一个listbox:
    Option Explicit
    Dim FSO As New FileSystemObject
    Private Sub Form_Load()
        Dim mfolder As Folder
        Set mfolder = FSO.GetFolder("\\192.168.2.1\guo")
        Dim mnode As Node
        Set mnode = Me.TreeView1.Nodes.Add(, , mfolder.Path, mfolder.Path)
        Dim a As File
        For Each a In mfolder.Files
            Me.List1.AddItem a.Name
        Next
        Dim subfolder As Folder
        For Each subfolder In mfolder.SubFolders
            Me.TreeView1.Nodes.Add mnode, tvwChild, subfolder.Path, subfolder.Name
        Next
        Set subfolder = Nothing
        Set a = Nothing
        Set mfolder = Nothing
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    Set FSO = Nothing
    End SubPrivate Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
        On Error Resume Next
        Dim mfolder As Folder
        Set mfolder = FSO.GetFolder(Node.Key)
        Dim a As File
        List1.Clear
        For Each a In mfolder.Files
            Me.List1.AddItem a.Name
        Next
        Dim subfolder As Folder
        For Each subfolder In mfolder.SubFolders
            Me.TreeView1.Nodes.Add Node, tvwChild, subfolder.Path, subfolder.Name
        Next
        Set subfolder = Nothing
        Set a = Nothing
        Set mfolder = Nothing
    End Sub
      

  2.   

    //2、复制sharedir下的文件到本地
    //3、怎样才能实现像windows那样的进度控制窗体上一个按钮,一个ProgressBar:Option Explicit
    '\\192.168.2.1\guo\123.rar
    Public Function CopyFile(Src As String, Dst As String, mProgressBar As ProgressBar) As Single
         
         Dim BTest As Single, FSize As Single
         Dim F1 As Integer, F2 As Integer
         Dim sArray() As Byte
         Dim buff As Integer
         
         Const BUFSIZE = 1024
         
         buff = 1024
         
         F1 = FreeFile
         Open Src For Binary Access Read As F1
         F2 = FreeFile
         Open Dst For Binary As F2
         
         FSize = LOF(F1)
         BTest = FSize - LOF(F2)
         ReDim sArray(BUFSIZE) As Byte
         
         Do
         If BTest < BUFSIZE Then
         buff = BTest
         ReDim sArray(buff) As Byte
         End If
         
         Get F1, , sArray
         Put F2, , sArray
         
         BTest = FSize - LOF(F2)
         If BTest < 0 Then
         mProgressBar.Value = 100
         Else
         mProgressBar.Value = (100 - Int(100 * BTest / FSize))
         End If
         Loop Until BTest <= 0
         
         Close F1
         Close F2
         CopyFile = FSize
         
        End FunctionPrivate Sub Command1_Click()
    '复制文件 d:\ms\room.exe 到 d:\room1.exe
    CopyFile "\\192.168.2.1\guo\123.rar", "d:\myroom2.exe", ProgressBar1
    End Sub
    需要指出的是以上代码成功运行的前提是共享文件夹的访问类型为“完全”,如果你的共享文件夹的访问类型为“只读”,你需要在程序运行时,改变它的访问类型为为“完全”。既然你已经知道了:
    如何共享文件夹,这里我就不罗嗦了其实,访问一个访问类型为“完全”的共享文件夹,和访问本地文件没有什么不同
      

  3.   

    感动ing,不过今天晚上没有时间式了,明天再说
      

  4.   

    非常感谢 rainstormmaster(rainstormmaster) 
    确实实现了我所要的功能,我从来没有想到过FSO有这种功能
    以及Open语句支持网络路径!这个连MSDN都没说。由此可见 rainstormmaster
    的确是高手中的高高手!但是经过我的测试,并不像您说的
    “其实,访问一个访问类型为“完全”的共享文件夹,和访问本地文件没有什么不同
    ”但是似乎只有OPEN、kill、rmdir、mkdir才一样,其他API我还没有尝试。
    (原来在win2k下copy、dir都支持网络 dir \\10.0.0.1\temp\*.*)
    再就是服务器的共享不可能没有密码的。如果设置完全权限,太不安全。Win98的共享不是用FSO的,因为我同学的机器从来不安装FSO(因为不安全),但是照样可以用网络邻居共享。其他的网络邻居工具软件比如IPBOOK 局域网超级工具 == 好像也不是用的FSO,并且支持密码据我所知,win2k之间的共享速度很快,而98对98 或者 2k对98 就很慢,应该有相关的API吧
    要不然为什么都这样。
    ===================================================
    应该有更完美的解决办法是我们所不知道的。
    可以解决 共享密码的问题
    尽量不要使用windows可选安装的项目再次感谢 rainstormmaster期待更完美的解决办法
      

  5.   

    呵呵,我是说的不够严谨,其实我所指的只是OPEN、kill。关于共享的权限和密码问题,可以通过api搞定,参考:
    http://expert.csdn.net/Expert/topic/2383/2383823.xml?temp=.4354364
    http://expert.csdn.net/Expert/topic/2437/2437228.xml?temp=.1366693
    http://expert.csdn.net/Expert/topic/2371/2371234.xml?temp=.311352
    http://expert.csdn.net/Expert/topic/2371/2371069.xml?temp=.9437525
      

  6.   

    首先感谢rainstormmaster的大力支持!
    第一个连接有一个跳转,转到用VBS如何批量设置权限(不是访问)
    第二、三个连接是如何使用NetShareAdd、NetShareDel Lib "netapi32.dll" 设置权限(不是访问)
    最后一个连接是如何使用Net Share似乎都不能解决远程登陆时的用户名密码问题
      

  7.   

    这是我引用别人的模块,(对不起,原作者的名字不是我删的,bas拿来时已经没有了)。
    请大家不要再怀疑设置共享方面还有问题,主要是如何才能访问带密码的共享
    Option Explicit'2000 下用API来实现目录共享及删除共享'共享类型
    Private Const STYPE_ALL       As Long = -1
    Private Const STYPE_DISKTREE  As Long = 0
    Private Const STYPE_PRINTQ    As Long = 1
    Private Const STYPE_DEVICE    As Long = 2
    Private Const STYPE_IPC       As Long = 3
    Private Const STYPE_SPECIAL   As Long = &H80000000'权限
    Private Const ACCESS_READ     As Long = &H1
    Private Const ACCESS_WRITE    As Long = &H2
    Private Const ACCESS_CREATE   As Long = &H4
    Private Const ACCESS_EXEC     As Long = &H8
    Private Const ACCESS_DELETE   As Long = &H10
    Private Const ACCESS_ATRIB    As Long = &H20
    Private Const ACCESS_PERM     As Long = &H40
    Private Const ACCESS_ALL      As Long = ACCESS_READ Or _
                                            ACCESS_WRITE Or _
                                            ACCESS_CREATE Or _
                                            ACCESS_EXEC Or _
                                            ACCESS_DELETE Or _
                                            ACCESS_ATRIB Or _
                                            ACCESS_PERM'共享信息
    Private Type SHARE_INFO_2
      shi2_netname       As Long        '共享名
      shi2_type          As Long        '类型
      shi2_re        As Long        '备注
      shi2_permissions   As Long        '权限
      shi2_max_uses      As Long        '最大用户
      shi2_current_uses  As Long        '
      shi2_path          As Long        '路径
      shi2_passwd        As Long        '密码
    End Type
      
    '设置共享
    Private Declare Function NetShareAdd Lib "netapi32" _
                               (ByVal ServerName As Long, _
                                ByVal level As Long, _
                                buf As Any, _
                                parmerr As Long) As Long'删除共享
    Private Declare Function NetShareDel Lib "netapi32.dll" _
                               (ByVal ServerName As Long, _
                                ByVal ShareName As Long, _
                                ByVal dword As Long) As Long
                         '设置共享(返回0 为成功)
    '参数:
    'sServer          计算机名
    'sSharePath       要共享路径
    'sShareName       显示的共享名
    'sShareRe     备注
    'sSharePw         密码
    Private Function ShareAdd(sServer As String, _
                              sSharePath As String, _
                              sShareName As String, _
                              sShareRe As String, _
                              sSharePw As String) As Long
       
       Dim lngServer   As Long
       Dim lngNetname  As Long
       Dim lngPath     As Long
       Dim lngRe   As Long
       Dim lngPw       As Long
       Dim parmerr    As Long
       Dim si2        As SHARE_INFO_2
       
       lngServer = StrPtr(sServer)      '转成地址
       lngNetname = StrPtr(sShareName)
       lngPath = StrPtr(sSharePath)
       
       '如果有备注信息
       If Len(sShareRe) > 0 Then
          lngRe = StrPtr(sShareRe)
       End If
       
       '如果有密码
       If Len(sSharePw) > 0 Then
          lngPw = StrPtr(sSharePw)
       End If
          
      '初始化共享信息
       With si2
          .shi2_netname = lngNetname
          .shi2_path = lngPath
          .shi2_re = lngRe
          .shi2_type = STYPE_DISKTREE
          .shi2_permissions = ACCESS_ALL
          .shi2_max_uses = -1
          .shi2_passwd = lngPw
       End With
                              
      '设置共享(用户名,共享类型,共享信息,)
       ShareAdd = NetShareAdd(lngServer, _
                              2, _
                              si2, _
                              parmerr)
                              
    End Function'删除共享(返回0 为成功)
    '参数:
    'sServer       计算机名
    'sShareName    共享名
    Private Function DelShare(sServer As String, _
                              sShareName As String) As Long
       
       Dim lngServer   As Long       '计算机名
       Dim lngNetname  As Long       '共享名   lngServer = StrPtr(sServer)      '转成地址
       lngNetname = StrPtr(sShareName)   '删除共享
       DelShare = NetShareDel(lngServer, lngNetname, 0)End Function
    (感谢源代码提供者)
      

  8.   

    To rainstormmaster
    您的意思我明白,让我重新设置服务器的管理权限。
    但是管理员绝对不会允许我这么做的。
      

  9.   

    用net use 可以,只是你不想用shell命令是不是?
    net use 是可以在windows中建立一个联接(你可以用net use可以看到所有的联接)
    你现在是不是不想用net use 而用api来代替?
    ================
    把下面代码放到module中
    Option Explicit
        Const WN_Success = &H0
        Const WN_Not_Supported = &H1
        Const WN_Net_Error = &H2
        Const WN_Bad_Pointer = &H4
        Const WN_Bad_NetName = &H32
        Const WN_Bad_Password = &H6
        Const WN_Bad_Localname = &H33
        Const WN_Access_Denied = &H7
        Const WN_Out_Of_Memory = &HB
        Const WN_Already_Connected = &H34
        Public ErrorNum As Long
        Public ErrorMsg As String
        Public rc As Long
        Private Const ERROR_NO_CONNECTION = 8
        Private Const ERROR_NO_DISCONNECT = 9
        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 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
        Const NO_ERROR = 0
        Const CONNECT_UPDATE_PROFILE = &H1
        Const RESOURCETYPE_DISK = &H1
        Const RESOURCETYPE_PRINT = &H2
        Const RESOURCETYPE_ANY = &H0
        Const RESOURCE_GLOBALNET = &H2
        Const RESOURCEDISPLAYTYPE_SHARE = &H3
        Const RESOURCEUSAGE_CONNECTABLE = &H1    Public Function ConnectUserPassword(sDrive As String, sService As String, Optional sUser As String = "", Optional sPassword As String = "") As Boolean
        Dim NETR As NETRESOURCE
        Dim errInfo As Long
        With NETR
        .dwScope = RESOURCE_GLOBALNET
        .dwType = RESOURCETYPE_DISK
        .dwDisplayType = RESOURCEDISPLAYTYPE_SHARE
        .dwUsage = RESOURCEUSAGE_CONNECTABLE
        .lpRemoteName = sDrive
        .lpLocalName = sService
        End With
        errInfo = WNetAddConnection2(NETR, sPassword, sUser, CONNECT_UPDATE_PROFILE)
        ConnectUserPassword = errInfo = NO_ERROR
        End Function
    ================
    call ConnectUserPassword("\\servername", "", "password", "username")相当于  net use \\servername  password /user:username
    不知道是否可以?返回值代表成功或失败
      

  10.   

    谢谢zqfleaf(动力港湾)
    一般我使用Net Use 影射网络驱动器,至于这种不需要盘符的Net use 没有用过
    =========20分钟之后============
    明白了, 使用net use \\10.0.0.3\movie password /user:username
    之后Windows会“记住”刚才输入的密码,以再次访问时不会提示输入密码
    这样可以实现针对密码的访问
    ========之所以不想用Net Use的原因=========
    因为win9x 的Net命令功能不全,不像win2000
    而且针对DOS命令(姑且让我这么叫吧)要求高,万一Net改名就没法用了再次感谢  zqfleaf(动力港湾)
      

  11.   

    问题基本上解决了。还有一点点的遗憾
    可不可以不用FSO,对于引用来说不一定每个操作系统都有
    而且不是每个人都喜欢FSO的(当然咱们例外,毕竟方便嘛)
    对于win98来说,这项功能在个人用户面前几乎没用,而且容易感染蠕虫
    所以有很多文章建议卸载这个组件。这样我的程序在通用性上就不是那么很好了。可不可以不用FSO。应该有其他的办法吧。
    (sorry rainstormmaster不是对您有意见,您的办法很好,我只是想知道有没有更完美的解决办法而已)===========================
    如果这个问题解决了,那么这个帖子可以组成局域网共享的完美解决方案了。
    建议斑竹加入精华贴
      

  12.   

    //问题基本上解决了
    且慢,在98下试过了吗,在98下更改共享文件夹的密码和访问类型,用zqfleaf(动力港湾)的代码可是不行的 :)//可不可以不用FSO。应该有其他的办法吧
    当然可以了,等会我写点代码贴上来
      

  13.   

    在98下建立访问类型为完全的访问密码为“”的共享文件夹
    Option ExplicitPrivate Const NERR_SUCCESS As Long = 0&' Share types
    Private Const STYPE_ALL       As Long = -1  'note: my const
    Private Const STYPE_DISKTREE  As Long = 0
    Private Const STYPE_PRINTQ    As Long = 1
    Private Const STYPE_DEVICE    As Long = 2
    Private Const STYPE_IPC       As Long = 3
    Private Const STYPE_SPECIAL   As Long = &H80000000' Flags
    Private Const SHI50F_RDONLY = &H1
    Private Const SHI50F_FULL = &H2
    Private Const SHI50F_DEPENDSON = SHI50F_RDONLY + SHI50F_FULL
    Private Const SHI50F_ACCESSMASK = SHI50F_RDONLY + SHI50F_FULL
    Private Const SHI50F_PERSIST = &H100 ' Partage persistant
    Private Const SHI50F_SYSTEM = &H200 ' Partage cach?' Permissions (Win ME/NT/2000/XP)
    Private Const ACCESS_READ     As Long = &H1
    Private Const ACCESS_WRITE    As Long = &H2
    Private Const ACCESS_CREATE   As Long = &H4
    Private Const ACCESS_EXEC     As Long = &H8
    Private Const ACCESS_DELETE   As Long = &H10
    Private Const ACCESS_ATRIB    As Long = &H20
    Private Const ACCESS_PERM     As Long = &H40
    Private Const ACCESS_ALL      As Long = ACCESS_READ Or ACCESS_WRITE Or ACCESS_CREATE Or ACCESS_EXEC Or ACCESS_DELETE Or ACCESS_ATRIB Or ACCESS_PERM' Win 9x
    Private Type SHARE_INFO_50
        shi50_netname(0 To 12) As Byte 'LM20_NNLEN + 1
        shi50_type As Byte 'EShareType
        shi50_flags As Integer
        shi50_re As Long
        shi50_Path As Long
        shi50_rw_password(0 To 8) As Byte 'SHPWLEN + 1
        shi50_ro_password(0 To 8) As Byte 'SHPWLEN + 1
    End Type' Quelle systeme d'exploitation
    Private Type OSVERSIONINFO
        dwOSVersionInfoSize As Long
        dwMajorVersion As Long
        dwMinorVersion As Long
        dwBuildNumber As Long
        dwPlatformId As Long
        szCSDVersion As String * 128
    End TypePrivate Declare Function NetShareAdd95 Lib "SVRAPI" Alias "NetShareAdd" (ByVal servername As String, ByVal level As Integer, ByVal buf As Long, ByVal cbBuffer As Integer) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)Private Sub cmdCreateShare_Click()
        
        Dim lngSuccess As Long
        
        ' Create the share     '要添加上相应的textbox
        lngSuccess = ShareAdd(UCase(txtComputerName.Text), UCase(txtLocalPath.Text), UCase(txtShareName.Text), txtShareDesc.Text)
        'lngSuccess = ShareAdd(txtComputerName.Text, txtLocalPath.Text, txtShareName.Text, txtShareDesc.Text, txtSharePassRo.Text, txtSharePassRw.Text)
        
        Select Case lngSuccess
           Case 0:    ' Share created successfully
           Case 2118'共享名已经存在,就改改共享名,我这随便补了一个1
           lngSuccess = ShareAdd(UCase(txtComputerName.Text), UCase(txtLocalPath.Text), UCase(txtShareName.Text) + "1", txtShareDesc.Text)
           Case Else: MsgBox "Create error number " & lngSuccess, vbCritical, "Error"
        End SelectEnd SubPrivate Function ShareAdd(sServer As String, sSharePath As String, sShareName As String, sShareRe As String) As Long    Dim si50 As SHARE_INFO_50
        Dim iErrParam As Integer
        Dim lpszPath() As Byte
        Dim lpszRe() As Byte
        Dim intFlags As IntegerintFlags = SHI50F_FULL Or SHI50F_PERSIST 'mode normal le partage est visible sur la machine
    ' flags = SHI50F_FULL Or SHI50F_PERSIST Or SHI50F_SYSTEM 'mode syst鑝e partage invisible
    lpszPath = StrConv(sSharePath, vbFromUnicode) & vbNullChar
    lpszRe = StrConv(sShareRe, vbFromUnicode) & vbNullCharWith si50
        StrToByte sShareName, VarPtr(.shi50_netname(0))
        .shi50_type = STYPE_DISKTREE
        .shi50_re = VarPtr(lpszRe(0))
        .shi50_Path = VarPtr(lpszPath(0))
        StrToByte "", VarPtr(.shi50_ro_password(0))
        StrToByte "", VarPtr(.shi50_rw_password(0))
        .shi50_flags = intFlags
    End WithShareAdd = NetShareAdd95("", 50, ByVal VarPtr(si50), LenB(si50))
        
    End FunctionPrivate Sub StrToByte(strInput As String, ByVal lpByteArray As Long)
        Dim lpszInput() As Byte
        lpszInput = StrConv(strInput, vbFromUnicode) & vbNullChar
        CopyMemory ByVal lpByteArray, lpszInput(0), UBound(lpszInput)
    End Sub
      

  14.   

    最奸单的办法把:
    将该文件夹加到FTP服务中啊,用Ftp访问嘛,哪里有这么复杂啊。
    功能实现就OK!
    我的软件下载地址:http://www.cnkernel.com/
      

  15.   

    //可不可以不用FSO。应该有其他的办法吧
    当然可以了,等会我写点代码贴上来就用现成的例子吧:
    'Create a form with a command button (command1), a list box (list1)
    'and four text boxes (text1, text2, text3 and text4).
    'Type in the first textbox a startingpath like c:\(这里你输入共享文件夹的路径,如:
    \\ns\mytest试试)
    'and in the second textbox you put a pattern like *.* or *.txtPrivate Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
    Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As LongConst MAX_PATH = 260
    Const MAXDWORD = &HFFFF
    Const INVALID_HANDLE_VALUE = -1
    Const FILE_ATTRIBUTE_ARCHIVE = &H20
    Const FILE_ATTRIBUTE_DIRECTORY = &H10
    Const FILE_ATTRIBUTE_HIDDEN = &H2
    Const FILE_ATTRIBUTE_NORMAL = &H80
    Const FILE_ATTRIBUTE_READONLY = &H1
    Const FILE_ATTRIBUTE_SYSTEM = &H4
    Const FILE_ATTRIBUTE_TEMPORARY = &H100Private Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
    End TypePrivate Type WIN32_FIND_DATA
        dwFileAttributes As Long
        ftCreationTime As FILETIME
        ftLastAccessTime As FILETIME
        ftLastWriteTime As FILETIME
        nFileSizeHigh As Long
        nFileSizeLow As Long
        dwReserved0 As Long
        dwReserved1 As Long
        cFileName As String * MAX_PATH
        cAlternate As String * 14
    End Type
    Function StripNulls(OriginalStr As String) As String
        If (InStr(OriginalStr, Chr(0)) > 0) Then
            OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
        End If
        StripNulls = OriginalStr
    End FunctionFunction FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
        'KPD-Team 1999
        'E-Mail: [email protected]    Dim FileName As String ' Walking filename variable...
        Dim DirName As String ' SubDirectory Name
        Dim dirNames() As String ' Buffer for directory name entries
        Dim nDir As Integer ' Number of directories in this path
        Dim I As Integer ' For-loop counter...
        Dim hSearch As Long ' Search Handle
        Dim WFD As WIN32_FIND_DATA
        Dim Cont As Integer
        If Right(path, 1) <> "\" Then path = path & "\"
        ' Search for subdirectories.
        nDir = 0
        ReDim dirNames(nDir)
        Cont = True
        hSearch = FindFirstFile(path & "*", WFD)
        If hSearch <> INVALID_HANDLE_VALUE Then
            Do While Cont
            DirName = StripNulls(WFD.cFileName)
            ' Ignore the current and encompassing directories.
            If (DirName <> ".") And (DirName <> "..") Then
                ' Check for directory with bitwise comparison.
                If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
                    dirNames(nDir) = DirName
                    DirCount = DirCount + 1
                    nDir = nDir + 1
                    ReDim Preserve dirNames(nDir)
                End If
            End If
            Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
            Loop
            Cont = FindClose(hSearch)
        End If
        ' Walk through this directory and sum file sizes.
        hSearch = FindFirstFile(path & SearchStr, WFD)
        Cont = True
        If hSearch <> INVALID_HANDLE_VALUE Then
            While Cont
                FileName = StripNulls(WFD.cFileName)
                If (FileName <> ".") And (FileName <> "..") Then
                    FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
                    FileCount = FileCount + 1
                    List1.AddItem path & FileName
                End If
                Cont = FindNextFile(hSearch, WFD) ' Get next file
            Wend
            Cont = FindClose(hSearch)
        End If
        ' If there are sub-directories...
        If nDir > 0 Then
            ' Recursively walk into them...
            For I = 0 To nDir - 1
                FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(I) & "\", SearchStr, FileCount, DirCount)
            Next I
        End If
    End Function
    Sub Command1_Click()
        Dim SearchPath As String, FindStr As String
        Dim FileSize As Long
        Dim NumFiles As Integer, NumDirs As Integer
        Screen.MousePointer = vbHourglass
        List1.Clear
        List1.Visible = False
        SearchPath = Text1.Text
        FindStr = Text2.Text
        FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
        Text3.Text = NumFiles & " Files found in " & NumDirs + 1 & " Directories"
        Text4.Text = "Size of files found under " & SearchPath & " = " & Format(FileSize, "#,###,###,##0") & " Bytes"
        Screen.MousePointer = vbDefault
        List1.Visible = True
    End Sub
      

  16.   

    我的Win98开共享方法基本上跟您的是一样的
    我先试试FindFirstFile...
    这几个API平时用的不多。看来一般也就这个时候用了
    =======正在尝试===========
      

  17.   

    可以查看目录了
    谢谢rainstormmaster
    ================================
    总体解决办法是这样的:
    1 根据操作系统决定使用哪一个DLL建立共享
    2 利用 动力港湾 提出的的mpr.dll建立连接(经检查winMe有,win98就不知道了)
    3 按照rainstormmaster提出的方法进行列表
    4 然后open.....get.. put ..close
    5 (好像少了关闭网络连接)(好像也没听说过)(但是Net use 有/delete的)
    ================================
    之差最后一步了,完成之后就可以结帖了
    小生能够得到诸位大哥的帮助深感荣幸,在这里谢谢大家了。
      

  18.   

    加上定义:
        Private Declare Function WNetDisconnectDialog Lib "mpr.dll" (ByVal hWnd As Long, ByVal dwType As Long) As Long Public Function DisconnectNetworkDialog() As Long   
         DisconnectNetworkDialog = WNetDisconnectDialog(0&, RESOURCETYPE_DISK)
     End Function=========
    在程序中call DisconnectNetworkDialog()
    会弹出一个联接对话框,选择哪一个断开,就可以断开了。
      

  19.   

    不行试试这个:
        Public Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long
    然后:
      call WNetCancelConnection2("\\servername",1,true)
      

  20.   

    '经过我的测试,两种方法都可以实现。现在把它整理出来
    '=============================================
    Option Explicit
    Private Const RESOURCETYPE_DISK = &H1
    Private Const RESOURCETYPE_ANY = &H0
    Private Const RESOURCETYPE_PRINT = &H2
    Private Const RESOURCETYPE_UNKNOWN = &HFFFF
    Private Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByVal lpName As String, ByVal dwFlags As Long, ByVal fForce As Long) As Long Private Declare Function WNetDisconnectDialog Lib "mpr.dll" (ByVal hWnd As Long, ByVal dwType As Long) As Long Public Function DisconnectNetworkDialog() As Long
     DisconnectNetworkDialog = WNetDisconnectDialog(0&, RESOURCETYPE_DISK)
     End Function
    Private Sub Command1_Click() '第一种方法
    Call DisconnectNetworkDialog
    End SubPrivate Sub Command2_Click()' 第二种方法
    Call WNetCancelConnection2("\\10.0.0.1\temp", 1, True)
    End Sub
      

  21.   

    现在可以说问题已经解决了
    虽然还有一些小小的问题,比如列出文件列表时有时会溢出。这个我会自己想办法解决的
    本来只想问一下如何连接的谁知道热心的rainstormmaster连98下的共享都列出来了。再次感谢rainstormmaster的帮助。
    总结:
    其实回过头来看看,这个问题的答案其实并不困难。是我想的太复杂了。没想到简单的FindFirstFile、FindNextFile解决了我的问题。还有远程文件的访问居然可以直接Open...
    真是应了这句话:“没有做不到,只有想不到”还有感谢 动力港湾 提供的mpr.dll的使用方法。原来只是映射网络驱动器,没有想到不用映射也可以建立连接。又是一个“没想到”。建议大家以后遇到问题时多多尝试一下。说不定就成功了呢 ^o^还有感谢帮忙UP的热心人。
    最后祝愿大家事业有成!
    =======================================================
    (如果没有什么补充我就要结帖了)