Browsing for Folders

The following example uses the SHBrowseForFolder function to prompt the user for a program group. The Programs directory is specified as the root.

// Main_OnBrowse - browses for a program folder.

// hwnd - handle of the application's main window

//

// Uses the global variable g_pMalloc, which is assumed to point

// to the shell's IMalloc interface.

  • oid Main_OnBrowse(HWND hwnd)

{

BROWSEINFO bi;

LPSTR lpBuffer;

LPITEMIDLIST pidlPrograms; // PIDL for Programs folder

LPITEMIDLIST pidlBrowse; // PIDL selected by user

// Allocate a buffer to receive browse information.

if ((lpBuffer = (LPSTR) g_pMalloc->lpVtbl->Alloc(

g_pMalloc, MAX_PATH)) == NULL)

return;

// Get the PIDL for the Programs folder.

if (!SUCCEEDED(SHGetSpecialFolderLocation(

hwnd, CSIDL_PROGRAMS, &pidlPrograms))) {

g_pMalloc->lpVtbl->Free(g_pMalloc, lpBuffer);

return;

}

// Fill in the BROWSEINFO structure.

bi.hwndOwner = hwnd;

bi.pidlRoot = pidlPrograms;

bi.pszDisplayName = lpBuffer;

bi.lpszTitle = "Choose a Program Group";

bi.ulFlags = 0;

bi.lpfn = NULL;

bi.lParam = 0;

// Browse for a folder and return its PIDL.

pidlBrowse = SHBrowseForFolder(&bi);

if (pidlBrowse != NULL) {

// Show the display name, title, and file system path.

MessageBox(hwnd, lpBuffer, "Display name", MB_OK);

if (SHGetPathFromIDList(pidlBrowse, lpBuffer))

SetWindowText(hwnd, lpBuffer);

// Free the PIDL returned by SHBrowseForFolder.

g_pMalloc->lpVtbl->Free(g_pMalloc, pidlBrowse);

}

// Clean up.

g_pMalloc->lpVtbl->Free(g_pMalloc, pidlPrograms);

g_pMalloc->lpVtbl->Free(g_pMalloc, lpBuffer);

}

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database