GetFolder : Shell Extension Folder Browser Function


Folder browser dialog - also enumerates network drives...


...demo application shows how easy it is to display dialog and retrieve user-selected folder.

Overview

This is a very standard technique used to retrieve folder information from Windows using the Shell extension functions SHBrowseForFolderA, SHGetPathFromIDList and SHGetDesktopFolder.

The Code

All you need to do is to call my function GetFolder. However, for the more curious among you that want to know more of the details, there are only two functions used here: one to cause the display of the standard folder browser dialog and a callback function that handles the processing of events while the dialog is being displayed). Here are the basic steps in my code.

GetFolder Steps

  1. Call SHGetDesktopFolder to get the IShellFolder interface for the desktop folder
  2. Call the IShellFolder.ParseDisplayName to get the identifier list
  3. Allocate and fill out a BROWSEINFOA structure with the desired parameters (e.g., pidl from the IShellFolder.ParseDisplayName, callback function that the shell will call with the folder names, etc.). The callback function is called BrowseCallbackProc.
  4. Call SHBrowseForFolderA to display the folder browse dialog (passing it the BROWSEINFOA structure which defines how that dialog should appear)
  5. Upon return from the SHBrowseForFolderA function, I then call the SHGetPathFromIDList function in order to retrieve the name of the user-selected folder.

BrowseCallbackProc Function

In this function I only need to handle the BFFM_INITIALIZED and the BFFM_SELCHANGED messages. Even then, all I'm doing is updating a field on the dialog to reflect the currently selected folder. This is the text that I retrieve in the last step of the GetFolder function.

Downloads

Download source and demo (including release build) - 18 Kb


Comments

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • On-demand Event Event Date: October 29, 2014 It's well understood how critical version control is for code. However, its importance to DevOps isn't always recognized. The 2014 DevOps Survey of Practice shows that one of the key predictors of DevOps success is putting all production environment artifacts into version control. In this webcast, Gene Kim discusses these survey findings and shares woeful tales of artifact management gone wrong! Gene also shares examples of how high-performing DevOps …

  • Learn How A Global Entertainment Company Saw a 448% ROI Every business today uses software to manage systems, deliver products, and empower employees to do their jobs. But software inevitably breaks, and when it does, businesses lose money -- in the form of dissatisfied customers, missed SLAs or lost productivity. PagerDuty, an operations performance platform, solves this problem by helping operations engineers and developers more effectively manage and resolve incidents across a company's global operations. …

Most Popular Programming Stories

More for Developers

RSS Feeds