The authoritative guide to Windows shell programming!
Prentice Hall PTR Microsoft Technologies Series
Leverage the hidden power of Windows shell programming!
Until now, shell programmingcommon in UNIX/Linux environmentshas 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!
Click here for a sample chapter for this book: 0130254967.pdf
1. Windows Shell Programming.
Goals of this Book. What is the Windows Shell? Chapter Summaries. Versions of the Shell. Summary.
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.
Guidelines for Creating Application Desktop Toolbars. How Appbars Work. An Application Desktop Toolbar Library. An Application Desktop Toolbar Application. Summary.
When to Use the Control Panel. Applet Expectations. A Control Panel Library and Wizard. Using the Tools. Control Panel Applets. Summary.
Screen Saver Responsibilities. Screen Saver Internals. Writing A Screen Saver. Example: The Bouncing Ball. Summary.
File Viewer Basics. File Viewer Internals. Building a File Viewer. Address Book Example. Summary.
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.
The Disk Cleanup Utility and Handlers. Address Book File Consolidation. Summary.
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.
1The Namespace Extension Wizard Creates A Project. 1The Implementation of IShellFolder (and its cohorts). 1The Implementation of IShellView (and its cohorts). 1Summary.
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.
1Band Object Basics. 1Creating a Band Object. 1Debugging Band Objects. 1Desk Band Example. 1Summary.
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.
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.