By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,866 Members | 1,704 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,866 IT Pros & Developers. It's quick & easy.

Folder?

P: n/a
Hi All,

I want to browse to a particular folder, not a particular file.

The reason for this is that I have a utility that asks people to browse
to a certain file, and I want them to be able to choose the location
that they start browsing.

Thanks in advance.

Regards,

Nick

Jul 31 '06 #1
Share this Question
Share on Google+
9 Replies


P: n/a
You can call the Windows Browse Filter dialog:
http://www.mvps.org/access/api/api0002.htm

--
Allen Browne - Microsoft MVP. Perth, Western Australia.
Tips for Access users - http://allenbrowne.com/tips.html
Reply to group, rather than allenbrowne at mvps dot org.

"Nick 'The Database Guy'" <ni*****@btinternet.comwrote in message
news:11**********************@i42g2000cwa.googlegr oups.com...
Hi All,

I want to browse to a particular folder, not a particular file.

The reason for this is that I have a utility that asks people to browse
to a certain file, and I want them to be able to choose the location
that they start browsing.

Thanks in advance.

Regards,

Nick

Jul 31 '06 #2

P: n/a
I've tried that one and it insists on showing a list of folders not filters,
what am I doing wrong ??

<g>

--

Terry Kreft
"Allen Browne" <Al*********@SeeSig.Invalidwrote in message
news:44**********************@per-qv1-newsreader-01.iinet.net.au...
You can call the Windows Browse Filter dialog:
http://www.mvps.org/access/api/api0002.htm

--
Allen Browne - Microsoft MVP. Perth, Western Australia.
Tips for Access users - http://allenbrowne.com/tips.html
Reply to group, rather than allenbrowne at mvps dot org.

"Nick 'The Database Guy'" <ni*****@btinternet.comwrote in message
news:11**********************@i42g2000cwa.googlegr oups.com...
Hi All,

I want to browse to a particular folder, not a particular file.

The reason for this is that I have a utility that asks people to browse
to a certain file, and I want them to be able to choose the location
that they start browsing.

Thanks in advance.

Regards,

Nick


Jul 31 '06 #3

P: n/a
Thanks for pointing that out Allen.

Cheers,

Nick

Allen Browne wrote:
You can call the Windows Browse Filter dialog:
http://www.mvps.org/access/api/api0002.htm

--
Allen Browne - Microsoft MVP. Perth, Western Australia.
Tips for Access users - http://allenbrowne.com/tips.html
Reply to group, rather than allenbrowne at mvps dot org.

"Nick 'The Database Guy'" <ni*****@btinternet.comwrote in message
news:11**********************@i42g2000cwa.googlegr oups.com...
Hi All,

I want to browse to a particular folder, not a particular file.

The reason for this is that I have a utility that asks people to browse
to a certain file, and I want them to be able to choose the location
that they start browsing.

Thanks in advance.

Regards,

Nick
Jul 31 '06 #4

P: n/a
But I wanted to browse a list of folders. Carrying on from there I
would like to know how I start browsing from a particular location.
Both in a full browser window and in the folder
browser?

Thanks,

Nick

Terry Kreft wrote:
I've tried that one and it insists on showing a list of folders not filters,
what am I doing wrong ??

<g>

--

Terry Kreft
"Allen Browne" <Al*********@SeeSig.Invalidwrote in message
news:44**********************@per-qv1-newsreader-01.iinet.net.au...
You can call the Windows Browse Filter dialog:
http://www.mvps.org/access/api/api0002.htm

--
Allen Browne - Microsoft MVP. Perth, Western Australia.
Tips for Access users - http://allenbrowne.com/tips.html
Reply to group, rather than allenbrowne at mvps dot org.

"Nick 'The Database Guy'" <ni*****@btinternet.comwrote in message
news:11**********************@i42g2000cwa.googlegr oups.com...
Hi All,
>
I want to browse to a particular folder, not a particular file.
>
The reason for this is that I have a utility that asks people to browse
to a certain file, and I want them to be able to choose the location
that they start browsing.
>
Thanks in advance.
>
Regards,
>
Nick
>
Jul 31 '06 #5

P: n/a
I have had some success with the full browser, it is not a complete
success though as the 'File name' box has the last folder of the tree
in it.

Nick

Nick 'The Database Guy' wrote:
But I wanted to browse a list of folders. Carrying on from there I
would like to know how I start browsing from a particular location.
Both in a full browser window and in the folder
browser?

Thanks,

Nick

Terry Kreft wrote:
I've tried that one and it insists on showing a list of folders not filters,
what am I doing wrong ??

<g>

--

Terry Kreft
"Allen Browne" <Al*********@SeeSig.Invalidwrote in message
news:44**********************@per-qv1-newsreader-01.iinet.net.au...
You can call the Windows Browse Filter dialog:
http://www.mvps.org/access/api/api0002.htm
>
--
Allen Browne - Microsoft MVP. Perth, Western Australia.
Tips for Access users - http://allenbrowne.com/tips.html
Reply to group, rather than allenbrowne at mvps dot org.
>
"Nick 'The Database Guy'" <ni*****@btinternet.comwrote in message
news:11**********************@i42g2000cwa.googlegr oups.com...
Hi All,

I want to browse to a particular folder, not a particular file.

The reason for this is that I have a utility that asks people to browse
to a certain file, and I want them to be able to choose the location
that they start browsing.

Thanks in advance.

Regards,

Nick

>
>
Jul 31 '06 #6

P: n/a
Nick,
Allen inadvertently typed "Windows Browse Filter" instead of Windows Browse
Folder, I was trying to be amusing.

The code for the browse dialog at the access web doesn't allow you to define
a start folder, you need a call back procedure to do this, the code below
will allow you to define a start folder.

If you go to http://www.mvps.org/access/api/api0001.htm you can download
code which allows you to call the open/save file dialog and allows you to
define a start folder.

'******************************
'Browse Folder Code Start
'******************************
Option Explicit

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

'******************************
'Functions in BrowseFolder
'******************************
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 Declare Sub ZeroMemory _
Lib "kernel32" Alias "RtlZeroMemory" _
(dest As Long, ByVal numBytes As Long)
Private Declare Function lstrcat _
Lib "kernel32" Alias "lstrcatA" _
(ByVal lpString1 As String, _
ByVal lpString2 As String) _
As Long
'******************************
'/Functions in BrowseFolder
'******************************

Private Declare Function GetFileVersionInfoSize Lib "version.dll" _
Alias "GetFileVersionInfoSizeA" _
(ByVal lptstrFilename As String, _
lpdwHandle As Long) As Long

Private Declare Function GetFileVersionInfo Lib "version.dll" _
Alias "GetFileVersionInfoA" _
(ByVal lptstrFilename As String, _
ByVal dwHandle As Long, _
ByVal dwLen As Long, _
lpData As Any) As Long

Private Declare Function VerQueryValue Lib "version.dll" _
Alias "VerQueryValueA" _
(pBlock As Any, _
ByVal lpSubBlock As String, _
lpBuffer As Any, _
nVerSize As Long) As Long

Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(Destination As Any, _
Source As Any, _
ByVal Length As Long)

'******************************
'Functions used in call back
'******************************
Private Declare Function GetCurrentDirectory _
Lib "kernel32" Alias "GetCurrentDirectoryA" _
(ByVal nBufferLength As Long, _
ByVal lpBuffer As String) _
As Long
Private Declare Function SendMessage _
Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) _
As Long
'******************************
'/Functions used in call back
'******************************

'******************************
'Root pidls
'******************************
Private Const CSIDL_DESKTOP = &H0
Private Const CSIDL_PROGRAMS = &H2
Private Const CSIDL_CONTROLS = &H3
Private Const CSIDL_PRINTERS = &H4
Private Const CSIDL_PERSONAL = &H5
Private Const CSIDL_FAVORITES = &H6
Private Const CSIDL_STARTUP = &H7
Private Const CSIDL_RECENT = &H8
Private Const CSIDL_SENDTO = &H9
Private Const CSIDL_BITBUCKET = &HA
Private Const CSIDL_STARTMENU = &HB
Private Const CSIDL_DESKTOPDIRECTORY = &H10
Private Const CSIDL_DRIVES = &H11
Private Const CSIDL_NETWORK = &H12
Private Const CSIDL_NETHOOD = &H13
Private Const CSIDL_FONTS = &H14
Private Const CSIDL_TEMPLATES = &H15
'******************************
'Root pidls
'******************************

'******************************
'uFlag consts
'******************************
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 BIF_RETURNONLYFSDIRS = &H1
Private Const BIF_EDITBOX = &H10
Private Const BIF_VALIDATE = &H20
Private Const BIF_NEWDIALOGSTYLE As Long = &H40
Private Const BIF_USENEWUI As Long = (BIF_NEWDIALOGSTYLE Or BIF_EDITBOX)
'******************************
'/uFlag consts
'******************************

Private Const WM_USER = &H400

'******************************
'Messages from dialog consts
'******************************
Private Const BFFM_INITIALIZED = 1
Private Const BFFM_SELCHANGED = 2
Private Const BFFM_VALIDATEFAILEDA = 3
Private Const BFFM_VALIDATEFAILED = BFFM_VALIDATEFAILEDA
'******************************
'/Messages from dialog consts
'******************************

'******************************
'Messages to dialog consts
'******************************
Private Const BFFM_SETSELECTIONA = WM_USER + 102
Private Const BFFM_SETSELECTION = BFFM_SETSELECTIONA
Private Const BFFM_SETSTATUSTEXTA = WM_USER + 100
Private Const BFFM_SETSTATUSTEXT = BFFM_SETSTATUSTEXTA
'******************************
'/Messages to dialog consts
'******************************

Private Const MAX_PATH = 260

Private strStartDir As String
'

Public Function BrowseFolder(szDialogTitle As String, _
Optional StartDir As String = vbNullString, Optional hWnd As Long = 0) As
String
'*******************************************
'Name: BrowseFolder (Function)
'Purpose: Open API browse for folder dialog
'Author: Terry Kreft
'Date: January 28, 2001, 09:50:20
'Called by: Any
'Calls: AddrOf _
Various API calls defined on this module
'Inputs: szDialogTitle - dialog prompt _
StartDir - Directory to start the _
browse in (Optional)
'Output: Directory selected in browse folder
'*******************************************

Dim x As Long
Dim BI As BROWSEINFO
Dim dwIList As Long
Dim szPath As String
Dim wPos As Integer
Dim lngPtr As Long
Dim bytBuffer() As Byte

strStartDir = StartDir
BrowseFolder = ""

Call ZeroMemory(VarPtr(BI), Len(BI))

' This has to be 1 element larger than the length
' of the string so that it contains the terminating
' Null character
ReDim bytBuffer(0 To Len(szDialogTitle))
For lngPtr = 1 To Len(szDialogTitle)
bytBuffer(lngPtr - 1) = Asc(Mid(szDialogTitle, lngPtr, 1))
Next

With BI
.pidlRoot = CSIDL_DESKTOP
.hOwner = hWnd
.lpszTitle = VarPtr(bytBuffer(0))
.ulFlags = BIF_RETURNONLYFSDIRS Or BIF_STATUSTEXT _
Or BIF_EDITBOX Or BIF_VALIDATE
If IsShellVersion(5) Then
.ulFlags = .ulFlags Or BIF_NEWDIALOGSTYLE
End If
.lpfn = AddrOf2k(AddressOf BrowseCallbackProc)
End With
dwIList = SHBrowseForFolder(BI)
If dwIList Then
szPath = Space$(512)
x = SHGetPathFromIDList(dwIList, szPath)
If x Then
wPos = InStr(szPath, Chr(0))
BrowseFolder = Left$(szPath, wPos - 1)
End If
End If
End Function

Function BrowseCallbackProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal lp As Long, ByVal pData As Long) As Long
'*******************************************
'Name: BrowseCallbackProc (Function)
'Purpose: Call back function for BrowseFolder
'Author: Terry Kreft
'Date: January 28, 2001, 09:52:56
'Called by: API Browse Folder dialog
'Calls: Various API functions
'Inputs: See MSDN for description of inputs
'Output:
'*******************************************
Dim lngRet As Long
Dim nBufferLength As Long
Dim lpBuffer As String

Const apiTrue = 1
Const apiFalse = 0
Const BAD_DIR = "The directory selected is invalid." _
& vbCrLf _
& "Do you want to try again"

lngRet = apiFalse
Select Case uMsg
Case BFFM_INITIALIZED
If Len(strStartDir) < 1 Then
nBufferLength = MAX_PATH
lpBuffer = String(MAX_PATH, 0)
If GetCurrentDirectory(nBufferLength, lpBuffer) Then
Call SendMessage(hWnd, BFFM_SETSELECTION, apiTrue, ByVal lpBuffer)
End If
Else
Call SendMessage(hWnd, BFFM_SETSELECTION, apiTrue, ByVal strStartDir)
End If
Case BFFM_SELCHANGED
'Set the status window to the currently selected path.
lpBuffer = String(MAX_PATH, 0)
If SHGetPathFromIDList(lp, lpBuffer) Then
lpBuffer = Left(lpBuffer, InStr(lpBuffer, Chr(0)) - 1)
Call SendMessage(hWnd, BFFM_SETSTATUSTEXT, apiTrue, ByVal lpBuffer)
End If
Case BFFM_VALIDATEFAILED
'If the user types an invalid path
If MsgBox(BAD_DIR, vbYesNo) = vbYes Then
lngRet = apiTrue
End If
' Case BFFM_IUNKNOWN

Case Else
Debug.Print uMsg
End Select
BrowseCallbackProc = lngRet
End Function

Function AddrOf2k(ByVal lngFnPtr As Long) As Long
AddrOf2k = lngFnPtr
End Function

Private Function IsShellVersion(ByVal Version As Long) As Boolean

'returns True if the Shell version
'(shell32.dll) is equal or later than
'the value passed as 'version'
Dim nBufferSize As Long
Dim nUnused As Long
Dim lpBuffer As Long
Dim nVerMajor As Integer
Dim bBuffer() As Byte

Const sDLLFile As String = "shell32.dll"

nBufferSize = GetFileVersionInfoSize(sDLLFile, nUnused)

If nBufferSize 0 Then

ReDim bBuffer(nBufferSize - 1) As Byte

Call GetFileVersionInfo(sDLLFile, 0&, nBufferSize, bBuffer(0))

If VerQueryValue(bBuffer(0), "\", lpBuffer, nUnused) = 1 Then

CopyMemory nVerMajor, ByVal lpBuffer + 10, 2

IsShellVersion = nVerMajor >= Version

End If 'VerQueryValue
End If 'nBufferSize

End Function

'******************************
'Browse Folder Code Start
'******************************
--

Terry Kreft
"Nick 'The Database Guy'" <ni*****@btinternet.comwrote in message
news:11*********************@s13g2000cwa.googlegro ups.com...
But I wanted to browse a list of folders. Carrying on from there I
would like to know how I start browsing from a particular location.
Both in a full browser window and in the folder
browser?

Thanks,

Nick

Terry Kreft wrote:
I've tried that one and it insists on showing a list of folders not
filters,
what am I doing wrong ??

<g>

--

Terry Kreft
"Allen Browne" <Al*********@SeeSig.Invalidwrote in message
news:44**********************@per-qv1-newsreader-01.iinet.net.au...
You can call the Windows Browse Filter dialog:
http://www.mvps.org/access/api/api0002.htm
>
--
Allen Browne - Microsoft MVP. Perth, Western Australia.
Tips for Access users - http://allenbrowne.com/tips.html
Reply to group, rather than allenbrowne at mvps dot org.
>
"Nick 'The Database Guy'" <ni*****@btinternet.comwrote in message
news:11**********************@i42g2000cwa.googlegr oups.com...
Hi All,

I want to browse to a particular folder, not a particular file.

The reason for this is that I have a utility that asks people to
browse
to a certain file, and I want them to be able to choose the location
that they start browsing.

Thanks in advance.

Regards,

Nick

>
>

Jul 31 '06 #7

P: n/a
Nick 'The Database Guy' wrote:
Hi All,

I want to browse to a particular folder, not a particular file.

The reason for this is that I have a utility that asks people to browse
to a certain file, and I want them to be able to choose the location
that they start browsing.

Thanks in advance.

Regards,

Nick
From:
http://msdn.microsoft.com/library/de.../folder_id.asp

"When the user selects a folder, SHBrowseForFolder returns the folder's
fully-qualified PIDL..."

So if your default folder is not going to change you could pick the
folder you want to be the default, return the PIDL using
SHBrowseForFolder, then use that PIDL to set the default folder in the
BROWSEINFO structure. I have tried this and it works well. If the
default folder needs to be changed at will then I believe the addition
of that flexibility can be found here:

http://www.lebans.com/callbackbrowser.htm

James A. Fortune
CD********@FortuneJames.com

Jul 31 '06 #8

P: n/a
My thanks go out to James and all other who posted a response.

CD********@FortuneJames.com wrote:
Nick 'The Database Guy' wrote:
Hi All,

I want to browse to a particular folder, not a particular file.

The reason for this is that I have a utility that asks people to browse
to a certain file, and I want them to be able to choose the location
that they start browsing.

Thanks in advance.

Regards,

Nick

From:
http://msdn.microsoft.com/library/de.../folder_id.asp

"When the user selects a folder, SHBrowseForFolder returns the folder's
fully-qualified PIDL..."

So if your default folder is not going to change you could pick the
folder you want to be the default, return the PIDL using
SHBrowseForFolder, then use that PIDL to set the default folder in the
BROWSEINFO structure. I have tried this and it works well. If the
default folder needs to be changed at will then I believe the addition
of that flexibility can be found here:

http://www.lebans.com/callbackbrowser.htm

James A. Fortune
CD********@FortuneJames.com
Aug 1 '06 #9

P: n/a
others *

CD********@FortuneJames.com wrote:
Nick 'The Database Guy' wrote:
Hi All,

I want to browse to a particular folder, not a particular file.

The reason for this is that I have a utility that asks people to browse
to a certain file, and I want them to be able to choose the location
that they start browsing.

Thanks in advance.

Regards,

Nick

From:
http://msdn.microsoft.com/library/de.../folder_id.asp

"When the user selects a folder, SHBrowseForFolder returns the folder's
fully-qualified PIDL..."

So if your default folder is not going to change you could pick the
folder you want to be the default, return the PIDL using
SHBrowseForFolder, then use that PIDL to set the default folder in the
BROWSEINFO structure. I have tried this and it works well. If the
default folder needs to be changed at will then I believe the addition
of that flexibility can be found here:

http://www.lebans.com/callbackbrowser.htm

James A. Fortune
CD********@FortuneJames.com
Aug 1 '06 #10

This discussion thread is closed

Replies have been disabled for this discussion.