Update 1
--------

Minor enhancements/bug fixes, plus a couple new features. None of the bugs are serious; anyone who downloaded the original code and never came back for the update is probably fine.


ENHANCEMENTS

All variant string functions (eg: Left()) have been replaced with their much faster true string counterparts (eg: Left$()) in all classes.

clsRegistry has been completely rewritten from scratch. Most of the functionality remains unchanged, except that no runtime errors are generated regardless of registry errors. Instead, two new properties have been exposed: ErrorNumber, which holds an enumerated error value from the last registry function call, and ErrorDescription, which holds a short string description of the error. 


BUG FIXES

The File and Folder Exists() methods had a minor bug. Previously, Folder.Exists("MyFile") would return True if the folder didn't exist but a file of the same name did. File.Exists had the equivalent problem. Both have been corrected.

Registry.ReadNumber would raise an error if the value didn't exist in addition to returning the specified Default. That error has been suppressed. Registry.ReadBoolean and Registry.ReadString didn't have this bug.


NEW FEATURES


clsDrive
--------

CloseDoor()
xp.Drive.CloseDoor [Drive]
Closes the CD or DVD door only if the drive is of the appropriate type. Trying close a hard drive or floppy disk is safely ignored. [Drive] should be a string in the format "D:"; if you omit the Drive parameter the default CD is closed.

Eject()
xp.Drive.Eject [Drive]
Ejects the CD or DVD only if the drive is of the appropriate type. Trying to eject a hard drive or floppy disk is safely ignored. [Drive] should be a string in the format "D:"; if you omit the Drive parameter the default CD is ejected.

GetType()
enType = xp.Drive.GetType("C:")
Returns the enumerated drive type of the specified drive.


clsRegistry
-----------

GetType() 
Now returns 0 (rdNone) if the value or key doesn't exist, making ValueExists() largely redundant.

DeleteKey() 
Now deletes keys even if they have subkeys.

ErrorDescription
MsgBox xp.Registry.ErrorDescription
Property that holds a short string decsription of the last registry error raised.

ErrorNumber
enRegistryError = xp.Registry.ErrorNumber
Property that holds an enumerated error number from the last registry function called.
