
Simple and right to the required folder
Ascii or Unicode
PB x86 or x64
Code: Select all
#BIF_RETURNONLYFSDIRS = 1;
#BIF_DONTGOBELOWDOMAIN = 2;
#BIF_STATUSTEXT = 4;
#BIF_RETURNFSANCESTORS = 8;
#BIF_EDITBOX = 16;
#BIF_VALIDATE = 32;
#BIF_NEWDIALOGSTYLE = 64;
#BIF_BROWSEINCLUDEURLS = 128;
;#BIF_USENEWUI = #BIF_EDITBOX | #BIF_NEWDIALOGSTYLE
#BIF_BROWSEFORCOMPUTER = $1000;
#BIF_BROWSEFORPRINTER = $2000;
#BIF_BROWSEINCLUDEFILES = $4000;
#BIF_SHAREABLE = $8000;
#BFFM_INITIALIZED = 1;
#BFFM_SELCHANGED = 2;
#BFFM_VALIDATEFAILEDA = 3;
#BFFM_VALIDATEFAILEDW = 4;
#BFFM_SETSTATUSTEXTA = #WM_USER + 100;
#BFFM_ENABLEOK = #WM_USER + 101;
#BFFM_SETSELECTIONA = #WM_USER + 102;
#BFFM_SETSELECTIONW = #WM_USER + 103;
#BFFM_SETSTATUSTEXTW = #WM_USER + 104;
#BFFM_SETOKTEXT = #WM_USER + 105;
#BFFM_SETEXPANDED = #WM_USER + 106
Global STYLE
CompilerIf #PB_Compiler_Unicode
STYLE = #BFFM_SETSELECTIONW
CompilerElse
STYLE = #BFFM_SETSELECTIONA
CompilerEndIf
Procedure PathCB(hWnd, uMsg, lParam, lData)
Select uMsg
Case #BFFM_INITIALIZED
If lData
SendMessage_ (hwnd, STYLE, 1, lData)
Delay(100)
PostMessage_ (hwnd, STYLE, 1, lData)
EndIf
EndSelect
EndProcedure
Procedure.S PathRequesterAPI( StatusText.S, Path.S)
Folder.S = Space(#MAX_PATH)
bi.BROWSEINFO
bi\ulFlags = #BIF_NONEWFOLDERBUTTON|#BIF_NEWDIALOGSTYLE |#BIF_RETURNONLYFSDIRS
bi\lpfn = @PathCB()
bi\lParam = @Path
bi\lpszTitle = @StatusText
Result = SHBrowseForFolder_(@bi)
SHGetPathFromIDList_(Result, @Folder)
CoTaskMemFree_(Result)
ProcedureReturn Folder
EndProcedure
PathRequesterAPI( "Select database folder", "c:\PureBasic_601_x86\Examples\Sources\data")