用API函數實現文件夾列表

 

用API函數實現文件夾列表


  在安裝軟件等一些操作中,需要用戶指定安裝路徑,現在軟件的安裝界面都是非常友好的,一般來說給出一個缺省路徑,用戶如不滿意可以在文件夾列表中選擇其他的路徑。在WIN9X下,一般不再採用原來的先在驅動器列表框中選擇驅動器再在相應的驅動器中選擇相應文件夾的界面,而是採用的類似資源管理器中“所有文件夾”界面:最上層是“桌面”,然後是“我的電腦”、驅動器A、C、D...等,在一個列表框中用戶可實現瀏覽所有驅動器及文件夾的操作。這種特色的文件列表沒有現成的控件可供使用,但利用API函數可方便地實現。

  實現方法:API函數SHBrowseForFolder可以提供這樣的文件列表,它需要用到一個BROWSEINFO類型,此類型包括了列表框使用的參數,此類型的聲明見下面的程序,其中這裏用到的幾個參數簡單說明一下:

  hwndOwner—當前窗口的句柄。

  pidlRoot—從何根路徑開始展開文件夾,缺省情況下從“桌面”開始展開。

  lpszTitle—目錄樹上方的標題,用來給用戶一些提示信息。

  ulFlags—顯示標誌控制項:比如若賦值爲BIF_BROWSEFORCOMPUTER,則只有當用戶選擇“我的電腦”時“確定”按鈕纔有效,這裏我們需要的是

  BIF_RETURNONLYFSDIRS,只有用戶選擇的是文件夾時“確定”按鈕纔有效。

  此函數返回值是指向項目(ITEM)的一個指針,有了這個數值,再用API函數SHGetPathFromIDList可以獲得具體的路徑,如果用戶按的是“取消”按鈕,則返回值爲NULL。

  下面是一個例子,在窗體中放置一個命令按鈕command1、一個文本框Text1,在窗體的聲明部分API聲明函數和類型及常量如下:

Option Explicit

Private Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type

Const BIF_RETURNONLYFSDIRS = &H1

Private pidl As Long

Private Declare Function
SHGetPathFromIDList _
Lib "shell32.dll" Alias
"SHGetPathFromIDListA" _
(ByVal pidl As Long, ByVal
pszPath As String) As Long

Private Declare Function
SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long

   雙擊命令按鈕,寫如下代碼:

Private Sub command1_Click()
Dim bi As BROWSEINFO
Dim r As Long
Dim pidl As Long
Dim path As String
Dim pos As Integer

句柄
bi.hOwner = Me.hWnd

展開根目錄
bi.pidlRoot = 0&

列表框標題
bi.lpszTitle = "請選擇軟件安裝路徑:"
規定只能選擇文件夾,其他無效

bi.ulFlags = BIF_RETURNONLYFSDIRS

調用API函數顯示列表框

pidl = SHBrowseForFolder(bi)

利用API函數獲取返回的路徑

path = Space$(512)
r = SHGetPathFromIDList(ByVal pidl&, ByVal path)
If r Then
pos = InStr(path, Chr$(0))
Text1 = Left(path, pos - 1)
Else: Text1 = ""
End If
End Sub

  運行此程序,單擊命令按鈕,就可以看到和資源管理器中一樣的“所有文件夾”列表了。

  此程序在中文WIN95/98、中文VB6.0專業版下調試通過。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章