Imitating Windows Explorer | CodeGuru

Imitating Windows Explorer

I wandered how I can simulate the Windows explorer listview of files. Here is what I found. It might be useful to someone. If you create a simple listview control and populate it with files/folders, you’ll notice that you can’t: Easily detect changes to files (rename, delete, copy/move…etc) while user is viewing the list Send […]

Written By
CodeGuru Staff
CodeGuru Staff
May 23, 2001
3 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

I wandered how I can simulate the Windows explorer listview
of files. Here is what I found. It might be useful to someone. If
you create a simple listview control and populate it with files/folders,
you’ll notice that you can’t:

  • Easily detect changes to files (rename, delete,
    copy/move…etc) while user is viewing the list
  • Send To menu is not
    populated if you try to use the shell’s menu for your items
  • There doesn’t seem to be a way of getting the column names used in
    shellview (filename, size, owner, times, and many others)

I found that Windows
explorer and File Open dialog expose IShellBrowser, which is
used by IShellFolder/IShellView to create the listview of
files.  So, I created a simple app with WTL.  Implemented basic
IShellBrowser methods and exposed it to IShellView
through IShellFolder::CreateViewObject.  Finally,
to create the listview I called
IShellView::CreateViewWindow.  I didn’t try to merge the
menus.
Things I couldn’t get to work:

  • Toolbar buttons (they were added to my toolbar,
    but bitmaps were messed up). They do function however.
  • The most important one for me was that I couldn’t
    easily detect when user wanted to open/explore/search the selected folder
    so  I could sync the file tree.

The IShellBrowser::BrowseObject was never even called,
so I didn’t implement it, but it should be implemented because most NSEs use this method.  I did
find that the shellview sends WM_DDE* messages and if you
respond properly you’ll get the info about the action user taken. The
needed messages are WM_DDE_INITIATE,
WM_DDE_EXECUTE, WM_DDE_TERMINATE
WM_DDE_EXECUTE will give you string such
as


 “[ViewFolder(“C:\Documents and
Settings\leon\Desktop\billing”, :428:780, 1)]


I have no idea what the 428:780 stand for, but action would be
ViewFolder/ExploreFolder/FindFolder.  It would be nice if Microsoft
documented this stuff so we could use it correctly.  In the MSDN they
state, “You do not implement this interface directly.
IShellBrowser is
implemented by Windows Explorer and by the Windows File Open common dialog box.” Why
did they tell us about WM_GETISHELLBROWSER?
Anyway, maybe it would be useful to someone, so here it is.




Some useful points:

  • To get drag drop functioning in shellview, call
    OleInitialize/OleUninitialize 
  • Make sure you respond properly to WM_GETISHELLBROWSER or CreateView might
    crash
  • Details listview seems to work only with FVM_DETAILS
    and FWF_SNAPTOGRID combination
  • ICommDlgBrowser can be supported to have a simple
    listview like in common file dialog boxes (without webview)
  • Don’t name your executable as explorer.exe or unpleasant things will
    happen


EnumDesk

Sample for enumerating/navigating folders/files (comes with PSDK) I have it
under

C:\Program
Files\Microsoft Platform SDK\Samples\WinUI\Shell




Q157247 –
PRB: IShellFolder::CreateViewObject() Causes Access Violation



IShellBrowser



IShellFolder



IShellView



Comments in the Shell Object Header File (shlobj.h) are useful.



Downloads



Explorer.zip – 14.2K

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.