README.TXT
Custom Command Extentions 
 
 
SUMMARY 
======= 
 
The Command.Ext sample demonstrates how to implement custom command extensions 
for the Microsoft Exchange Client. In particular, it demonstrates: 
 
  - adding a menu command 
  - adding a toolbar button 
  - disabling/enabling the menu item and toolbar item depending what object 
    is selected in the viewer 
  - making MAPI calls from an extension 
  - extending a command in the Main Viewer and the Search Viewer dialog 
  - F1 response for context help on the menu item 
  - Implementing custom Tooltip and Status Bar text 
 
The custom command displays the number of subfolders, read messages, and 
unread messages in a selected folder. 
 
MORE INFORMATION 
================ 
 
This sample requires Microsoft Windows NT 3.51 or Windows 95, the MAPI 1.0 
PDK, Microsoft Visual C++ version 2.0 (or later), and the Win32 SDK. 
 
 
To configure Microsoft Exchange to use the client extension, place the 
following REG_SZ entry in the system registry in 
HKEY_LOCAL_MACHINE\Software\Microsoft\Exchange\Client\Extensions: 
 
    Sample Command Extension=4.0;c:\<path>\CMDEXT32.dll;1;01010000000000 
 
You can leave out an explicit path to CMDEXT32.DLL if it resides in a 
directory listed in the system PATH. 
 
Exchange client extensions are designed using OLE's Component Object Model. 
The client calls methods which are provided in the extension. In some 
calls to the extension interface, a pointer to a callback interface 
(IExchExtCallback) for the extension to call back into the Exchange client. 
For more information read "Extending the Microsoft Exchange Client" in the 
MAPI PDK documentation. 
 
This sample implements three interface objects: IExchExt, IExchExtCommands, 
and IExchExtUserEvents. To extend the command set of Exchange, it is 
necessary to provide implementations for IExchExt and IExchExtCommands. 
It is optional to provide implementation for IExchExtUserEvents. This sample 
implements IExchExtUserEvents to enable or disable the custom command, 
depending on what object the user is selecting in the Exchange main viewer. 
The menu item is always enabled in the Search Folder Dialog. 
 
The custom command is available in both the Main viewer and the Search 
Folder Dialog. The IExchExtCommands provides an interface for the client to 
display context help on the custom menu item and to display tooltip text and 
status window text.  Select the custom menu item and press F1 to pop-up an 
About dialog box. 
 
This extension works in two different contexts, main viewer and search dialog. 
For each context an extension supports, a complete set of interface objects 
is created. In this sample, the MyExchExt, MyExchExtCommands and 
MyExchExtUserEvents objects are created once for the main viewer context and 
once for the search dialog. However, because there is only one 
implementation for all contexts, there is a context flag data member which 
indicates which context Exchange is calling from. 
 
A context in many cases corresponds to a user interface. For example, the 
search viewer is one context and the main viewer is another. QueryInterface 
is called for each IID for each context. In this example, QueryInterface is 
called each time for all IIDs in the main viewer context when 
Exchange first starts. QueryInterface is called again each time for all 
IIDs in the search viewer context. For each of the contexts, a unique pointer 
to the MyExchExtCommands and MyExchExtUserEvents objects is returned to 
Exchange in the QueryInterface call. Then when Exchange is calling 
DoCommands from the search viewer, it is calling the one using the interface 
pointer returned to it through QueryInterface in the search viewer context. 
And when Exchange is calling DoCommands from the main viewer, it is calling 
the one using the interface pointer returned to it through QueryInterface in 
the main viewer context.