新聞| | PChome| 登入
2007-05-18 11:20:50 | 人氣110| 回應0 | 上一篇 | 下一篇
推薦 0 收藏 0 轉貼0 訂閱站台

用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專業版下調試透過。

台長: Kenny
人氣(110) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 教育學習(進修、留學、學術研究、教育概況) | 個人分類: 程式設計 |
此分類下一篇:每次啟動 Windows 時自動運行程式
此分類上一篇:枚舉出區域網路上所有網路資源

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文