“浏览文件夹”窗口,就是在windows下升级驱动程序出现的那个。:D

解决方案 »

  1.   

    你是要打开的是文件夹还是文件啦?
    如果是文件夹的话就“浏览文件夹”(只能显示文件夹及文件,不能指定文件类别),如果是文件的话用“打开”(可以显示指定类别的文件,如:.txt文件)楼主的意思是不是指:选择一个文件夹,然后把这个文件夹中所有指定类型的文件打开(或其它操作)?如果是这样的话,你可以先选择文件夹,然后利用FileListBox来获取这个文件夹中所有指定类别的文件。
      

  2.   

    问题虽然简短,但应该明了啊。这个问题是要通过“浏览文件夹”窗口,来获取其中指定文件的文件名。
    你讲的那个方法在界面上看起来让人不舒服,还有一个active控件common dialog control,如果程序运行,需要它的ocx文件。现在想用api的办法,应该是比较好的。
      

  3.   

    我提的问题麻烦。
        我找到一个api调用common dialog control控件showsave对话框的实例,但我不知道怎么用这个api函数来实现以下需求。    如何用api调用common dialog control控件的showopen对话框,满足文件名获得的需求。   请高手和老鸟指导。   下面是我找到的那个api调用common dialog control控件showsave对话框的实例:
    Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As LongPrivate Type OPENFILENAME    lStructSize As Long    hwndOwner As Long    hInstance As Long    lpstrFilter As String    lpstrCustomFilter As String    nMaxCustFilter As Long    nFilterIndex As Long    lpstrFile As String    nMaxFile As Long    lpstrFileTitle As String    nMaxFileTitle As Long    lpstrInitialDir As String    lpstrTitle As String    flags As Long    nFileOffset As Integer    nFileExtension As Integer    lpstrDefExt As String    lCustData As Long    lpfnHook As Long    lpTemplateName As StringEnd TypeDim OFName As OPENFILENAMEPrivate Function ShowSave() As String    'Set the structure size    OFName.lStructSize = Len(OFName)    'Set the owner window    OFName.hwndOwner = Me.hwnd    'Set the application's instance    OFName.hInstance = App.hInstance    'Set the filet    OFName.lpstrFilter = "Text Files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All Files (*.*)" + Chr$(0) + "*.*" + Chr$(0)    'Create a buffer    OFName.lpstrFile = Space$(254)    'Set the maximum number of chars    OFName.nMaxFile = 255    'Create a buffer    OFName.lpstrFileTitle = Space$(254)    'Set the maximum number of chars    OFName.nMaxFileTitle = 255    'Set the initial directory    OFName.lpstrInitialDir = "C:\"    'Set the dialog title    OFName.lpstrTitle = "Save File - KPD-Team 1998"    'no extra flags    OFName.flags = 0    'Show the 'Save File'-dialog    If GetSaveFileName(OFName) Then        ShowSave = Trim$(OFName.lpstrFile)    Else        ShowSave = ""    End IfEnd Function
      

  4.   

    “浏览文件夹”窗口可以显示文件名,但不能指定类别。
    所有的通用对话框都可以用API实现,所以可以不用OCX控件。
    我先贴一段代码,你看看是不是你想要的:
    Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
    Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 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 Const BIF_BROWSEINCLUDEFILES = &H4000 '包含文件
    Private Const BIF_RETURNONLYFSDIRS = 1 '返回目录
    Private Const BIF_BROWSEINCLUDEURLS As Long = &H80 '包含网页
    Private Const MAX_PATH = 260
    Private 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 Type
    '浏览文件夹
    Private Function BrowseFolder(lhWnd As Long, sPrompt As String, Optional sIniDir As String = "") As String
       Dim iNull As Integer
       Dim lpIDList As Long
       Dim lResult As Long
       Dim sPath As String
       Dim udtBI As BrowseInfo   With udtBI
          .hwndOwner = lhWnd
          .lpszTitle = lstrcat(sPrompt, "")
          .ulFlags = BIF_RETURNONLYFSDIRS Or BIF_BROWSEINCLUDEFILES Or BIF_BROWSEINCLUDEURLS
    '      .lpfnCallback = GetProc(AddressOf BrowseCallbackProc)
       End With   lpIDList = SHBrowseForFolder(udtBI)
       
       If lpIDList Then
          sPath = String$(MAX_PATH, 0)
          lResult = SHGetPathFromIDList(lpIDList, sPath)
          Call CoTaskMemFree(lpIDList)
          iNull = InStr(sPath, vbNullChar)
          If iNull Then sPath = Left$(sPath, iNull - 1)
       End If   BrowseFolder = Trim$(sPath)
    End FunctionPrivate Sub Command1_Click()
    Me.AutoRedraw = True
    Print BrowseFolder(Me.hWnd, "asdf")
    End Sub
      

  5.   

    这是我是程序中的一些代码,自已看看吧:
    '******************文件对话框用到的 API函数、常量和结构开始**********************
    '显示“打开文件”对话框
    Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
    Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
    Private Const OFN_FILEMUSTEXIST = &H1000 '文件必须存在
    Private Const OFN_HIDEREADONLY = &H4 '隐藏只读按钮
    Private Const OFN_ALLOWMULTISELECT = &H200 '允许多选
    Private Const OFN_EXPLORER = &H80000 '以资源管理器样子显示对话框
    Private Const OFN_CREATEPROMPT = &H2000 '文件不存在时提示创建
    Private Const OFN_OVERWRITEPROMPT = &H2 '当覆盖时提示
    Private Const OFN_PATHMUSTEXIST = &H800 '路径必须存在Private Type OPENFILENAME
        lStructSize As Long '结构大小
        hwndOwner As Long '父窗口句柄
        hInstance As Long '实例句柄
        lpstrFilter As String '文件过滤字符串
        lpstrCustomFilter As String '自定义的文件过滤字符串
        nMaxCustFilter As Long '自定义的文件过滤字符串的最大长度
        nFilterIndex As Long '默认的文件过滤
        lpstrFile As String '返回的文件(全路径)
        nMaxFile As Long '返回的文件的最大长度
        lpstrFileTitle As String '返回的文件的名称
        nMaxFileTitle As Long '返回的文件的名称的最大长度
        lpstrInitialDir As String '初始化目录
        lpstrTitle As String '对话框标题
        flags As Long '
        nFileOffset As Integer '
        nFileExtension As Integer '返回的文件的扩展名
        lpstrDefExt As String '默认的扩展名
        lCustData As Long '
        lpfnHook As Long '
        lpTemplateName As String '
    End Type
    '******************文件对话框用到的 API函数、常量和结构结束**********************'文件对话框特性
    Private Enum FileFlags
      [ffHideReadOnly] = OFN_HIDEREADONLY '隐藏只读复选框(打开、保存)
      [ffFileMustExist] = OFN_FILEMUSTEXIST '返回的文件必须存在(打开)
      [ffPathMustExist] = OFN_PATHMUSTEXIST '返回的路径必须存在(保存)
      [ffOverWritePrompt] = OFN_OVERWRITEPROMPT '当文件存在时提示是否覆盖(保存)
      [ffExplorer] = OFN_EXPLORER '以资源管理器样子显示对话框(打开、保存)
      [ffAllowMultiSelect] = OFN_ALLOWMULTISELECT '允许多选(打开)
      [ffCreatePrompt] = OFN_CREATEPROMPT '文件不存在时提示创建新文件(保存)
    End Enum'文件对话框的类型
    Private Enum FileDlg
      [fdOpen] = 0 '打开
      [fdSave] = 1 '保存
    End EnumPrivate Function FileDialog(lhWnd As Long, fd As FileDlg, ByVal sFilter As String, ByVal sTitle As String, Optional lMax As Long = 255, Optional sDefExt As String = "", Optional sIniDir As String = "", Optional ff As FileFlags = 0)
    '*************************************************************************
    '名  称:通用文件对话框函数(打开和保存)
    '作  者:方耀东([email protected])
    '日  期:2003-11-25
    '参  数:lhWnd     As Long        窗口句柄
    '        fd        As FileDlg     对话框类型,参考 FileDlg 枚举
    '        sFilter   As String      文件类型,形如:"MP3 (*.mp23)" & Chr$(0) & "*.mp3" & Chr$(0) "WAV (*.wav)" & Chr$(0) & "*.wav" & Chr$(0)
    '        sTitle    As String      对话框标题
    '        lMax      As Long        返回的文件(全路径)和文件标题的最大长度
    '        sDefExt   As String      如果没有为文件指定扩展名的话,将使用这个默认的扩展名(用于保存对话框)
    '        sIniDir   As String      打开对话框时的初始目录
    '        ff        As FileFlags   对话框效果,参考 FileFlags 枚举
    '返回值:对话框返回的文件(全路径,String类型)
    '说  明:此函数用于显示打开(或保存,由 fd 参数决定)对话框
    '        并以全路径形式返回选择的文件
    '**************************************************************************  Dim OFName As OPENFILENAME
      With OFName
        '设置结构的大小
        .lStructSize = Len(OFName)
        '设置父窗口
        .hwndOwner = lhWnd
        '设置程序的实例
        .hInstance = App.hInstance
        '设置过滤属性
        .lpstrFilter = sFilter '"MusicBox 播放列表(*.mbp)" & Chr$(0) & "*.mbp" & Chr$(0)
        '设置默认扩展名
        If sDefExt <> "" Then .lpstrDefExt = sDefExt
        '为文件(全路径)创建缓冲区
        .lpstrFile = Space$(lMax - 1)
        '设置返回的文件(全路径)的最大长度
        .nMaxFile = lMax
        '为文件名称创建缓冲区
        .lpstrFileTitle = Space$(lMax - 1)
        '设置返回的文件名称的最大长度
        .nMaxFileTitle = lMax
        '设置初始目录
        If sIniDir <> "" Then .lpstrInitialDir = sIniDir
        '设置对话框标题
        .lpstrTitle = sTitle '"保存播放列表"
        .flags = ff
      End With
      
      '显示对话框并获取返回的文件
      If fd = fdOpen Then
        If GetOpenFileName(OFName) Then
          FileDialog = OFName.lpstrFile
        Else
          FileDialog = ""
        End If
      Else
        If GetSaveFileName(OFName) Then
          FileDialog = OFName.lpstrFile
        Else
          FileDialog = ""
        End If
      End If
    End FunctionPrivate Sub Command1_Click()
    Me.AutoRedraw = True
    Dim strFilter As String
    strFilter = "文本文档(*.txt)" & Chr$(0) & "*.txt" & Chr$(0) & "所有文件(*.*)" & Chr$(0) & "*.*" & Chr$(0)
    Print FileDialog(Me.hWnd, fdOpen, strFilter, "示例 - 打开文件对话框", 255, "txt", App.Path)
    End Sub
      

  6.   

    以下是API调用SHOWOPEN对话框的函数及说明等:
    函数原型:
    Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
    说明:
    The GetOpenFileName function creates an Open common dialog box that lets the user specify the drive, directory, and the name of a file or set of files to open.
    参数:
    lpofn
    Pointer to an OPENFILENAME structure that contains information used to initialize the dialog box. When GetOpenFileName returns, this structure contains information about the user抯 file selection.
    返回值:
    If the user specifies a filename and clicks the OK button, the return value is nonzero. The buffer pointed to by the lpstrFile member of the OPENFILENAME structure contains the full path and filename specified by the user. If the user cancels or closes the Open dialog box or an error occurs, the return value is zero. To get extended error information, call the CommDlgExtendedError function, which can return one of the following values:
    CDERR_FINDRESFAILURE, CDERR_NOHINSTANCE, CDERR_INITIALIZATION, CDERR_NOHOOK, CDERR_LOCKRESFAILURE, CDERR_NOTEMPLATE, CDERR_LOADRESFAILURE, CDERR_STRUCTSIZE, CDERR_LOADSTRFAILURE, FNERR_BUFFERTOOSMALL, CDERR_MEMALLOCFAILURE, FNERR_INVALIDFILENAME, CDERR_MEMLOCKFAILURE, FNERR_SUBCLASSFAILURE哦,对了,上面的程序中因为使用了多选的功能,所以返回的文件名后面有Chr$(0)字符,把它去掉就可以了:
    把这一句:
    Print FileDialog(Me.hWnd, fdOpen, strFilter, "示例 - 打开文件对话框", 255, "txt", App.Path)
    改成:
    Print Replace(FileDialog(Me.hWnd, fdOpen, strFilter, "示例 - 打开文件对话框", 8192, "txt", App.Path), Chr$(0), "")
    如果你要选择多个文件的话,就不要把Chr$(0)去掉,因为多个文件名之间是用Chr$(0)分隔的。
      

  7.   

    .   谢谢你。第一个我有点看不懂。太晚,明天我试一下    第二个api调用其中有一个常量定义:    Private Const OFN_ALLOWMULTISELECT = &H200 '允许多选    是指实现类似common dialog control 多文件选取吗?在这个api调用里,如果多文件选取,它是怎么保存多个文件名的?    其实,我对windows编程了解的不多,这些窗体变量参数是怎么来的,我更不懂。呵
        能得到你的指导,我很荣幸。
        希望以后和你多多学习。我的msn是:[email protected]