SpeakJ! by Arne Michaelsen, 1999
Email: arnemich

**NOTE**
The regular version of Speak! can be used on Japanese machines now (as well as other DBCS languages).  This version has been discontinued and is out of date.

**Japanese Enabled Speak!**
SpeakJ! is a recompiled version of Speak! that can handle Japanese DBCS characters in the TreeView, Info boxes, and URLs of items.  It is identical to Speak! but with Japanese fonts selected for the controls, and compiled on a JPN version of VB6/Win2000 (because picking the fonts alone on an ENG machine doesn't seem to cut it).

"I'll call you Speak, because that's what you do."

**Recent changes**
7/22/99: Added simple error handling.  Now instead of a msgbox and quitting, Speak! will dump the error number and text to the inforomation window and continue running.

7/22/99: Added the ".." button.  Clicking that button will alter the currently entered URL to remove the highest level folder/item from the path.  It enables you to quickly get back to the folder that contains the item you are looking at, for instance.  It only alters the URL, it will not automaticly open the URL, you still need to hit enter or click the "Peek!" button.

7/16/99: The default behavior for opening an item is to have the tree view automaticly expanded now.  99% of the time this is exactly what I want to do, so this eliminates the need to expand all the branches myself.  When opening a folder, the root folder (the one specified by your URL) will be expanded, but subfolders will not be.

7/15/99: Added the ability to accept a URL as a command line argument.  If Speak! is executed with any command line argument, it will assume that is a valid URL and attempt to open that URL immediately.  If Speak! is placed somewhere in your path, you can call it from anywhere in a command prompt box, or use the Shell() function in VB to spawn it and immediately view a particular URL that you have.  Such a command might look like this:

Call Shell("Speak!.exe " & strURL, vbNormalFocus)

Also added some sample urls to the info window on startup.  Cut-n-paste them if you hate typing in a whole URL from scratch.  

**Description**
Speak! is a very simple tool for exploring folders within the Platinum store and examining the stream and bodyparts structure of calendaring objects and messages.

Speak! is extremely useful for viewing the streams, bodyparts, and bodyparts structure of calendaring items very quickly.  It is also useful for scanning the folders of a mailbox or the public folders collection for message items.


**Super easy setup instructions**
All you need is Speak!.exe and all the components required for ADODB and CDOEX to work.  Generally Speak! is used on the same machine as the Platinum server, but it can be used remotely if you have ADODB, CDOEX, and RoseBud working.

**Super easy usage instructions**
Simply run Speak!, enter a URL in the top right text box, and click the "Peek!" button (or hit enter).  Speak! understands ExOLEDB ("file://") and RoseBud ("http://") URLs.  Once Speak! starts looking for your URL, one of three things happens:

1) Your URL is incorrect:  Speak! will give you an error message and exit.

2) Your URL is a folder: Speak! will build a tree view of all the items in that folder, recursively.  Any folders with items in them (messages, appointments, meeting requests) will have those listed as part of the contents.  Navigating the tree view on the left will show information in the text box on the right (currently only the URL of that item and its content-type).

3) Your URL is a message, appointment, or meeting request:  Speak! will build a tree view of all the bodyparts in the left window.  The tree can be navigated normally, and represents the complete structure of the item.  The "root level" item in the tree will display various schema properties and values in the right window.  The rest of the tree will list items by their content-types.  Attachments will also have their filenames after the content-type.  Clicking on a bodypart in the left window will display the complete stream for that bodypart in the right window.  Each stream includes ALL of the streams of its sub bodyparts, so the first bodypart listed above the "root" of the treeview represents the entire message stream.  Other bodyparts will show their respective sub-portions of the complete stream.

There is a fourth possibility:  If you gave the URL of a valid item, but Speak! does not recognize the item as a folder or a message, appointment, or meeting request, nothing will happen and the view on the left will still show the results from the previous action.  Since Exchange Schema and the CDOEX interface are still evolving, future changes in them may render your version of Speak! useless.  Check on \\cdotest\tools\Speak! for a newer version.


**Speak! shortcuts and tips**
Double-clicking the URL window will instantly highlight the entire contents so they may all be erased or overwritten quickly.  This also helps for cut-and-paste as well.

If you are in the folder view mode, and you highlight a message, appointment, or meeting request in the tree view, double clicking on the right window will automaticly paste the URL for that item into the URL window.  Then you can click the Peek! button to view it quickly.  Cut-and-paste from the right window to the URL window is also possible.


**Known Speak! bugs and limitations**
Speak! has very limited error handling.  Most errors will display a message and cause Speak! to exit.  I leave it like this to make finding CDOEX bugs easier (that is the point of this tool, anyway!).

Speak! has a limit of 10,000 items at once in the tree view.  I doubt any single message object will have more than 10,000 bodyparts, but it is possible if you want to be obnoxious.  10,000 items in the tree view is very possible if you try to view the entire mailbox of a user with a lot of test messages.

Speak! will not display streams greater than 50k, just to avoid being a memory hog.  Bodyparts greater than 50k will simply display "too big!" in the information window on the right.  Even if your entire stream is too large (usually because of an encoded attachment), the sub-bodyparts that are less than 50k can still be displayed normally.  In my experiance only file attachments (and the higher level bodyparts that contain them) run into this problem.