小弟最近学完VB,想写一个浏览txt文本的软件。
具体想法是这样:用API打开浏览文件夹界面,选中文件夹后,软件自动依次打开文件夹中的TXT
我的API函数如下:
Private Const BIF_STATUSTEXT = &H4&
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260Private Const WM_USER = &H400
Private Const BFFM_INITIALIZED = 1
Private Const BFFM_SELCHANGED = 2
Private Const BFFM_SETSTATUSTEXT = (WM_USER + 100)
Private Const BFFM_SETSelectION = (WM_USER + 102)Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As LongPrivate Type BrowseInfo
  hWndOwner      As Long
  pIDLRoot       As Long
  pszDisplayName As Long
  lpszTitle      As Long
  ulFlags        As Long
  lpfnCallback   As Long
  lParam         As Long
  iImage         As Long
End TypePrivate m_CurrentDirectory As String   '当前目录
Public Function BrowseForFolder(owner As Form, Title As String, StartDir As String) As String
  Dim lpIDList As Long
  Dim szTitle As String
  Dim sBuffer As String
  Dim tBrowseInfo As BrowseInfo
  m_CurrentDirectory = StartDir & vbNullChar  szTitle = Title
  With tBrowseInfo
    .hWndOwner = owner.hWnd
    .lpszTitle = lstrcat(szTitle, "")
    .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN + BIF_STATUSTEXT
    .lpfnCallback = GetAddressofFunction(AddressOf BrowseCallbackProc)  '获取function地址
  End With  lpIDList = SHBrowseForFolder(tBrowseInfo)
  If (lpIDList) Then
    sBuffer = Space(MAX_PATH)
    SHGetPathFromIDList lpIDList, sBuffer
    sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
    BrowseForFolder = sBuffer
  Else
    BrowseForFolder = ""
  End If
  
End FunctionPrivate Function BrowseCallbackProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal lp As Long, ByVal pData As Long) As Long
    Dim lpIDList As Long
  Dim ret As Long
  Dim sBuffer As String
  On Error Resume Next
  Select Case uMsg
    Case BFFM_INITIALIZED
      Call SendMessage(hWnd, BFFM_SETSelectION, 1, m_CurrentDirectory)
    Case BFFM_SELCHANGED
      sBuffer = Space(MAX_PATH)
      
      ret = SHGetPathFromIDList(lp, sBuffer)
      If ret = 1 Then
        Call SendMessage(hWnd, BFFM_SETSTATUSTEXT, 0, sBuffer)
      End If
  End Select
  BrowseCallbackProc = 0
End FunctionPrivate Function GetAddressofFunction(add As Long) As Long
  GetAddressofFunction = add
End FunctionPrivate Sub Open_Click()
Dim bi As BrowseInfo
Dim folderid As Long
Dim pb As String
folderid = SHBrowseForFolder(bi)
If folderid = 0 Then Exit Sub
pb = String$(260, 0)
SHGetPathFromIDList folderid, pb
pb = Left$(pb, InStr(pb, vbNullChar) - 1)
Text2.Text = pb      '返回路径到text2
End Sub
我的文件夹路径返回到了TEXT中,我该怎样用这个路径打开文件夹?
拜谢了!

解决方案 »

  1.   

    学完VB,API都能写了,这点问题就不是问题了
      

  2.   

    额,API函数这块不是我写的,是我百度的,我还不够写这个的能力,所以来这求指教
      

  3.   

    再搜搜怎么把某个目录下的文件放到ListBox中
      

  4.   

    你所谓的打开是用记事本打开还是读到TEXT中也没说清楚
      

  5.   

    我的思路是这样的:我有一个文件夹,里面放了很多txt文本。
    类似的文件夹有很多,所以我在指定打开目录的时候,只是指定到了文件夹这一级
    然后软件要做的事是:打开文件夹,将里面的txt文件名输入到数组里,因为文件夹一级的路径我都可以获取,
    所以我只要加上数组里的文件名,就可以组成txt的完整路径,就可以打开txt。只要软件依次取txt名,就可以依次打开txt文件。
    但目前我打开文件夹时,用文件夹的路径打不开,所以后面走不下去。
    谢谢您的关注
      

  6.   

    嗯,每个文件夹是100个txt,这个是固定的,现在问题就在于,我用text2中返回的文件夹路径,打不开文件夹,折磨我很久了,望您有时间的话给看看
      

  7.   

    Private Sub Command1_Click()
    Dim c
    Dim sFile As String
    Dim a()
    Dim b
    sFile = Dir("C:\Documents and Settings\Administrator\桌面\新建文件夹\*.txt")
    Do While Len(sFile)
    b = b + 1
    ReDim Preserve a(0 To b)
     a(b) = sFile
     
    sFile = Dir()
    Shell "notepad " & "C:\Documents and Settings\Administrator\桌面\新建文件夹\" & a(b), 1Loop
      

  8.   

    得到一个目录下指定文件的模块:DIR+递归实现搜索文件,支持通配符(VB6.0)Dim I() As String, J As LongI = SearchFileInPath("c:\windows\web", "*.*")For J = 0 To UBound(I)
        Debug.Print I(J)    '打印所有文件
    Next
    调用很简单.返回就是一个数组.
      

  9.   

    上面程序中,括号里的路径,我之前显示在了text中,如何给它加引号来满足格式?
      

  10.   

    加引号
    qsq=""""+s+""""
    或者
    qsq=chr(34)+s+chr(34)