|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic Browse/ PIDL / CSIDL
Routines Implementing the SHBrowseForFolder: Browse for Folders Dialog |
||
Posted: | Saturday May 17, 1997 | |
Updated: | Monday December 26, 2011 | |
Applies to: | VB4-32, VB5, VB6 | |
Developed with: | VB4-32, Windows 95 | |
OS restrictions: | None | |
Author: | Brad Martinez | |
Related: | BROWSE: SHBrowseForFolder: Browse Folders Dialog Overview SHBrowseForFolder: Browse for Folders Callback Overview SHBrowseForFolder: Pre-selecting Folders using a Browse Callback SHBrowseForFolder: Browse for Folders New UI Features SHBrowseForFolder: Browse to Obtain Network Machines or Shares CSIDL / Folders: |
|
Prerequisites |
None. |
|
Possibly one of the 'top ten' newsgroup questions, the code here shows the correct technique to call the Browse dialog from within a VB app, based on code authored and provided to VBnet by Brad Martinez. |
BAS Module Code |
None. |
|
Form Code |
To a project form add two command buttons (Command1 and Command2), and a label (Label1) as indicated in the illustration. Add the following to the form: |
|
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 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 Private Const BIF_RETURNONLYFSDIRS = &H1 Private Const BIF_DONTGOBELOWDOMAIN = &H2 Private Const BIF_STATUSTEXT = &H4 Private Const BIF_RETURNFSANCESTORS = &H8 Private Const BIF_BROWSEFORCOMPUTER = &H1000 Private Const BIF_BROWSEFORPRINTER = &H2000 Private Const MAX_PATH As Long = 260 Private Declare Function SHGetPathFromIDList Lib "shell32" _ Alias "SHGetPathFromIDListA" _ (ByVal pidl As Long, _ ByVal pszPath As String) As Long Private Declare Function SHBrowseForFolder Lib "shell32" _ Alias "SHBrowseForFolderA" _ (lpBrowseInfo As BROWSEINFO) As Long Private Declare Sub CoTaskMemFree Lib "ole32" _ (ByVal pv As Long) Private Sub Command1_Click() Dim bi As BROWSEINFO Dim pidl As Long Dim path As String Dim pos As Long Label1.Caption = "" 'Fill the BROWSEINFO structure with the 'needed data. To accommodate comments, the 'With/End With syntax has not been used, though 'it should be your 'final' version. With bi 'hwnd of the window that receives messages 'from the call. Can be your application 'or the handle from GetDesktopWindow() .hOwner = Me.hWnd 'pointer to the item identifier list specifying 'the location of the "root" folder to browse from. 'If NULL, the desktop folder is used. .pidlRoot = 0& 'message to be displayed in the Browse dialog .lpszTitle = "Select your Windows\System\ directory" 'the type of folder to return. .ulFlags = BIF_RETURNONLYFSDIRS End With 'show the Browse Dialog pidl = SHBrowseForFolder(bi) 'the dialog has closed, so parse & display the 'user's returned folder selection contained in pidl path = Space$(MAX_PATH) If SHGetPathFromIDList(ByVal pidl, ByVal path) Then pos = InStr(path, Chr$(0)) Label1.Caption = Left(path, pos - 1) End If Call CoTaskMemFree(pidl) End Sub |
Comments |
Running the project, the folder you select in the Browse dialog will be returned to the label. |
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |