Roadmap for the Windows Shell
The Microsoft Windows User Interface (UI) provides users with access to a variety of objects necessary for accessing the resources of the computer as well as the resources of connected devices and networked computers. These resources include applications such as folders and shortcuts, files, printers, Control Panel, and other virtual objects, shell services, and certain UI components. Examples of shell services include file operations, Web and file browsing, drag-and-drop operations, and file and device synchronization; while examples of UI components include application icons, tool and desk bands, the Taskbar, the Windows Desktop, Windows Explorer, and common dialog boxes.
As Windows Shell was first introduced and expanded with each release of a new Windows operating system, the availability and functionality of DLLs changed with each version of Windows. Software developers must be cautious when developing backward-compatible applications. For example, in Windows version 3.0, the first Shell was implemented as a native Win16 DLL with a corresponding API. It featured multiple, overlapping windows and the Program Manager for browsing and managing the file system. Windows® 95 featured many UI improvements, a new Windows Explorer, and a new COM-based platform with corresponding APIs. Microsoft Internet Explorer® version 3 added Internet shortcuts and browser extensions. Subsequent versions of Windows and Internet Explorer expanded correspondingly the Win32 and COM APIs. The runtime for the Shell is distributed over a number of dynamic link libraries, including these primary DLLs:
Implements the core Shell runtime and APIs.
Offers a range of lightweight utility and wrapper functions. For example, this DLL provides limited Unicode functionality for legacy Windows operating systems.
Contains the Windows Common Controls.
Contains the Internet Explorer browser component.
Contains APIs for working with URLs, their associated content, and also other Internet information protocols.
Implements the Desktop Window Manager runtime and APIs.
Handles PROPVARIANT, VARIANT and VARTYPE, and PROPERTYKEY structure types.
For more information, see "Shell and Common Controls Versions" in the Windows SDK.
The Shell organizes resource instances (objects) into a single hierarchical namespace with the Desktop as the root, and provides users and applications with a consistent and efficient way to access and manage these objects. Objects are identified locally by an item ID (SHITEMID) structure, and identified in a globally unique way by a full or absolute item ID list (ITEMIDLIST) structure. However, most functions and methods use a Pointer Item Identifier List (PIDL) to represent the ID list instead.
The Shell also provides a number of extensibility mechanisms to support custom applications and resources, such as file name extensions, customized shortcut menus and application icons, extension handlers, namespace extensions, rich preview handlers and live icons, synchronization handlers, and adding Control Panel applets.
For a good introduction to the Windows Shell and detailed information, see "Shell Programmer's Guide" in the Windows SDK. For a listing of the new APIs in Windows Vista®, see Resources: New Shell Interfaces and Resources: New Shell Functions in the Windows SDK. For the Microsoft® .NET Framework, no centralized support exists for Shell programming, although partial support is scattered throughout the namespaces. For example, the System.Windows.Forms namespace contains support for Common Dialogs. Although basic Shell capabilities can be accessed through interoperability mechanisms, Shell extensions should not be implemented with managed code because of performance and compatibility issues. For more information, see Interoperability & Migration in the Windows SDK.