Home > Store

Windows Shell Programming

Register your product to gain access to bonus material or receive a coupon.

Windows Shell Programming


  • Sorry, this book is no longer in print.
Not for Sale


  • Copyright 2000
  • Dimensions: 7 X 9-1/4
  • Pages: 556
  • Edition: 1st
  • Book
  • ISBN-10: 0-13-025496-7
  • ISBN-13: 978-0-13-025496-2

The authoritative guide to Windows shell programming!

  • Leverage the full power of the Windows shell!
  • Techniques that leverage your existing C++, MFC, and ATL skills
  • Custom taskbars, menus, toolbars, views, and more
  • Build your own control panel applet
  • Supercharge applications with shell-related features
  • CD-ROM: Extensive library of ready-to-run sample code

Prentice Hall PTR Microsoft Technologies Series

  • The authoritative, comprehensive guide to Windows shell programming
  • Connect MFC and ATL frameworks to any part of the Windows API—graphical or not!
  • Customize the Windows taskbar and menu options
  • Provide advanced handling of folders, drives, and printers
  • Add custom toolbars and views of data
  • For all experienced Visual C++, C++, Visual Basic, and MFC developers

Leverage the hidden power of Windows shell programming!

Until now, shell programming—common in UNIX/Linux environments—has been poorly documented in Windows. Windows Shell Programming changes all that! In this breakthrough book, Scott Seely shows every experienced Windows developer how to leverage the full power of the Windows shell to build more powerful, competitive applications.

Discover how the Windows shell works, and how you can enhance it by leveraging the C++, MFC, and ATL skills you already have. Then learn how to build custom taskbars, application desktop toolbars, briefcase reconcilers, screensavers, file parsers, file viewers, disk cleanup handlers, and much more.

Want to customize Windows Explorer? Build new control panel applets? Want to add extra right-click menu options? Enhance your applications with nifty shell-related features, such as filename auto-completion? With Windows Shell Programming, you can do all that, and more. No other book covers the Windows shell in this depth!

Sample Content

Downloadable Sample Chapter

Click here for a sample chapter for this book: 0130254967.pdf

Table of Contents

1. Windows Shell Programming.

Goals of this Book. What is the Windows Shell? Chapter Summaries. Versions of the Shell. Summary.

2. The Taskbar.

How to Get Taskbar Information. How to Add and Remove Buttons From the Taskbar. How to Add Items to the Start Menu. How to Add Icons to the System Tray. Summary.

3. Application Desktop Toolbars.

Guidelines for Creating Application Desktop Toolbars. How Appbars Work. An Application Desktop Toolbar Library. An Application Desktop Toolbar Application. Summary.

4. Control Panel Applets.

When to Use the Control Panel. Applet Expectations. A Control Panel Library and Wizard. Using the Tools. Control Panel Applets. Summary.

5. Screen Savers.

Screen Saver Responsibilities. Screen Saver Internals. Writing A Screen Saver. Example: The Bouncing Ball. Summary.

6. File Viewers.

File Viewer Basics. File Viewer Internals. Building a File Viewer. Address Book Example. Summary.

7. Shell Extensions.

Common Features of Shell Extensions. Context Menu Handlers. Icon Handlers. Data Handlers. Drop Handlers. Property Sheet Handlers. Copy Hook Handler. Drag-and-Drop Handler. Summary.

8. Disk Cleanup Handlers.

The Disk Cleanup Utility and Handlers. Address Book File Consolidation. Summary.

9. Namespace Extensions.

When to Build a Namespace Extension. Types of Namespace Extensions. What is in a PIDL? Folders and Other Items. Displaying All the Contents of the Folder. Testing and Debugging Namespace Extensions. Summary.

10. Tools to Build a Namespace Extension.

1The Namespace Extension Wizard Creates A Project. 1The Implementation of IShellFolder (and its cohorts). 1The Implementation of IShellView (and its cohorts). 1Summary.

11. Namespace Extension Example: The Registry.

1Requirements for the Registry Namespace Extension. 1Defining the Registry ITEMIDLIST Structure. 1Implementing the IEnumIDList Interface. 1Implementing the IShellFolder Interface. 1Displaying the Contents of the Folder: CWinRegListView. 1Summary.

12. Explorer Bars and Desktop Bands.

1Band Object Basics. 1Creating a Band Object. 1Debugging Band Objects. 1Desk Band Example. 1Summary.

Appendix A: COM Interfaces Used by the Shell.

ICatRegister. IContextMenu. IContextMenu2. IContextMenu3. ICopyHook. IDataObject. IDeskBand. IDockingWindow. IDropTarget. IEmptyVolumeCacheCallBack. IEmptyVolumeCache. IEmptyVolumeCache2. IEnumIDList. IEnumExtraSearch. IExtractIcon. IFileViewer. IFileViewerSite. IInputObject. IInputObjectSite. IObjectWithSite. IOleCommandTarget. IOleInPlaceFrame. IOleWindow. IQueryInfo. IPersist. IPersistFile. IPersistFolder. IPersistStream. IRemoteComputer. ISequentialStream. IShellBrowser. IShellChangeNotify. IShellDetails. IShellExecuteHook. IShellExtInit. IShellFolder. IShellFolder2. IShellIcon. IShellLink. IShellPropSheetExt. IShellView. IShellView2. IStream. IUnknown.

Appendix B: Shell Functions, Structures, and Enumerations.

BrowseCallbackProc. BROWSEINFO. CSIDL_XXXX. EXTRASEARCH. FOLDERFLAGS. FOLDERSETTINGS. FOLDERVIEWMODE. FORMATETC. FVSHOWINFO. CMINVOKECOMMANDINFO. ITEMIDLIST. NOTIFYICONDATA. REGSAM. SHAddToRecentDocs. SHAppBarMessage. SHAutoComplete. SHBindToParent. SHBrowseForFolder. SHChangeNotify. SHCONTF. SHCopyKey. SHCreateShellPalette. SHDeleteEmptyKey. SHDeleteKey. SHDeleteValue. SHDESCRIPTIONID. Shell_NotifyIcon. ShellAbout. SHELLDETAILS. ShellExecute. ShellExecuteEx. SHELLEXECUTEINFO. SHELLFLAGSTATE. ShellProc. SHEmptyRecycleBin. SHEnumKeyEx. SHEnumValue. SHFILEINFO. SHFileOperation. SHFILEOPSTRUCT. SHFreeNameMappings. SHGetDataFromIDList. SHGetDesktopFolder. SHGetDiskFreeSpace. SHGetFileInfo. SHGetFolderLocation. SHGetFolderPath. SHGetInstanceExplorer. SHGetMalloc. SHGetNewLinkInfo. SHGetPathFromIDList. SHGetSettings. SHGetSpecialFolderLocation. SHGetSpecialFolderPath. SHGetValue. SHGNO. SHInvokePrinterCommand. SHITEMID. SHLoadInProc. SHNAMEMAPPING. SHOpenRegStream. SHQueryInfoKey. SHQUERYRBINFO. SHQueryRecycleBin. SHQueryValueEx. SHRegCloseUSKey. SHRegCreateUSKey. SHREGDEL_FLAGS. SHRegDeleteEmptyUSKey. SHRegDeleteUSValue. SHREGENUM_FLAGS. SHRegEnumUSKey. SHRegEnumUSValue. SHRegGetBoolUSValue. SHRegGetUSValue. SHRegOpenUSKey. SHRegQueryInfoUSKey. SHRegQueryUSValue. SHRegSetUSValue. SHRegWriteUSValue. SHSetValue. SHStrDup. STGMEDIUM. STRRET. StrRetToBuf. StrRetToStr. SV2CVW2_PARAMS. WIN32_FIND_DATA.


While writing this book I got a lot of help and encouragement from many people. This whole project started as a result of an interview I went on almost two years ago. While going through my technical evaluation, one interviewer asked me if I had ever done any interesting side projects. Of course I had. I explained an animated icon class I had written that allows an individual to easily put icons into the system tray (the area by the clock on the taskbar) and animate them. The person asked if I read Windows Developers Journal (WDJ) and mentioned that the whole idea might make good article.

About four months later, I proposed the idea to Ron Burk at WDJ. He liked the idea, so I wrote the article. By November 1998, I had my first article published. I got a lot of positive feedback on it, which encouraged me to keep writing. Exhilarated by the first article, I wrote a second for WDJ this time on screen savers. While waiting for the article to be published in the March 1999 WDJ, I got an e-mail from Tim Moore at Prentice Hall. He liked the style of the November 1998 article and wondered if I had a desire to write a book. We talked on the phone and I threw the idea of a book on the Windows shell at him. As a result of that conversation, I wrote up a proposal, sent it to Tim, and waited. By March 1999, I had a signed contract and started writing this book. Almost a year later, I finished the darn thing.

During the course of this project, I received help from a lot of people. First and foremost, my wife Jean and my son Vince have been unbelievably supportive and helpful throughout the whole project. If they had not taken up the slack in the household duties, this book would have been impossible to write. I also need to thank my parents and my in-laws for helping out when I needed some extra time to get a chapter done. My grandparents and my sister also helped motivate me when the job seemed to take forever.

I received a good deal of help from people outside of my family, as well. Thanks to Andy Skwierawski, Thad Phetteplace, Arjen deKlerk, and Hunter Hudson for reviewing the book. I also want to thank the Microsoft shell development team for answering my questions on the msnews.microsoft.com news server. If you ever need their help, they hang out in the microsoft.public.platformsdk.ui_shell group and will answer most questions quickly. Be careful about flaming the documentation or the product – the tech writers and developers read the group too, and they prefer constructive comments. Most of them do this on their own time, so be happy that they are willing to answer your questions without making you go through Microsoft support.

Finally, I want to thank the staff at Prentice Hall for all the effort that they put into developing this book, from the idea stage to the final product. If I did not have the support of this great company, I would not have been able to get this book out. This has been a lot of fun.


Submit Errata

More Information

Unlimited one-month access with your purchase
Free Safari Membership