Version 1.0.0 - 6 March 2009
Created the search class and a simple test form.

Revisions 1.0.1 to 1.1.0
Developed project until ready for submission.

Revision 1.1.1 - 17 July 2009
First submitted to PSC.

Revision 1.1.2 - 6 Aug 2009
Implemented ability to replace removable media then list and search new content. Optimized sorting compare function. Added clean-up code to remove temporary extracted files. Added comments to search form and class.

Revision 1.1.3 - 11 Aug 2009
Thanks to Alan Corby, fix for UNIX zips that fail to record the uncompressed file size in the zip archive. Also added by request elapsed time of searches.

Revision 1.1.4 - 12 Aug 2009
Search history bug fix, introduced in 1.1.2.

Revision 1.1.5 - 10 Sept 2009
Added icon in system tray on minimize. Minor fixes and improvements. Added ability to search multi-line text content.

Revision 1.1.6 - 30 Sept 2009
Added auto-complete to paths. Minor improvements. Added option to list full paths in listview.

Revision 1.1.7 - 11 Oct 2009
Much improved registered path checked-style listbox. Added search groups. Increased registered paths and search history to 30 each.

Revision 1.1.8 - 22 Oct 2009
Enabled insertion/deletion of registered search paths without losing cache. File delete bug fix. Added Ralph/Rd fast text compare to list sorting. Now remembers listview column widths.

Revision 1.1.9 - 12 Nov 2009
Group registry bug fix. Fixed stubborn ShellExecute(Ex) bug! Added Win95/Vb5 compatible version.

Revision 1.2.0 - 22 Dec 2009
Fixed another history bug! Added option to add ZipSearch to explorers folders context menu. Added option to clear search results.

Revision 1.2.1 - 26 Dec 2009
Improved search speed by replacing DoEvents with GetQueueStatus API and only calls DoEvents on a select few events when they occur.

Revision 1.2.2 - 23 Jan 2011
Zipped files that are larger than 65536 bytes are now extracted to disk and searched chunk by chunk, while small files are still extracted to memory for searching. Added scroll wheel hook for tree and list view.

Revision 1.2.3 - 28 Nov 2011
Reworked the search class to use a binary lookup class (replaced Blizzard sorting routine!) that allows dynamic addition and deletion of file system objects along with fast binary key and index searching.

Revision 1.2.4 - 11 Dec 2011
Added file system monitoring to update search class and GUI as changes are made outside of the program. Shell change notification module thanks to Louis - www.louis-coder.com.

Revision 1.2.5 - 21 Dec 2011
Fixed bugs introduced in v1.2.4

Revision 1.2.6 - 29 Dec 2011
Fixed another bug introduced in v1.2.4

Revision 1.2.7 - 19 Jan 2012
I was unwittingly relying on API unicode to ansi conversion when passing the SHFILEOPSTRUCT udt defined with String members in FilePath.bas. It now works correctly with both Declare and TypeLib methods by using explicit unicode to ansi conversion with StrConv and the String members defined as Long and passing StrPtr.

Revision 1.2.8 - 8 May 2012
Finally! This update has been a work in progress since 1.1.2. Now combines the Shell change notification functionality added in 1.2.4 with removable media like CDs and DVDs, memory sticks, and USB drives to respond to all file system changes both in the search class and the GUI dynamically. This is now very much like a file system browser (a.k.a windows explorer).

Revision 1.2.9 - 15 May 2012
Fixed bug introduced in 1.2.8. Improved search class garbage collector (smarter re-use of freed items).

Revision 1.3.0 - 25 May 2012
Fixed minor bugs. Added RAR archive search capability using Alexander Roshal's Unrar.dll.

Revision 1.3.1 - 4 June 2012
Fixed tiny but serious bug in new RAR search code - failed to reset variable to zero at the start of each archive search. Last Win9x version!

Revision 1.3.2 - 10 June 2012
Updated the whole project to use the 'W' API functions to preserve unicode, however the zip and rar libraries may not support unicode file names internally.

Revision 1.3.3 - 9 Feb 2014
Fixed a bug in Unrar.dll where packed folders were being created empty in the current directory as files are successfully extracted to the specified destination (yes, littering your file system with empty folders!).

Revision 1.3.4 - 3 June 2016
Lots of small bug fixes and improvements. One instance only. Added Refresh View option. Search scope drop-down behavior fix. Tooltiptext update on Search button to remind user of changed search scope - searching the wrong scope gets annoying. Improved right-click context menus. TreeView no longer goes blank sometimes when starting a new search (Refresh before Lock). Added 'splash' icon at start-up :)

Revision 1.3.5 - 9 July 2016
Just a small update to fix some mis-behavior with the Search Paths pseudo drop-down list. Basically trying to take charge of the focus changes to keep correct behavior in all situations. Completely fixed now?

Revision 1.3.6 - 17 July 2016
Quite a major update as it requires users of ZipSearch to update their copy of Info-Zips Unzip32.dll for the zip features to continue working in ZipSearch 1.3.6 or later. Unzip32.dll v6 is freely available from Info-Zip and if you have an earlier version it will no longer work with ZipSearch. Version 6 of Unzip32 fixes several short-comings of version 5 and earlier, not least of which is the DLL no longer fails to extract some files. You can download the latest version here: ftp://ftp.info-zip.org/pub/infozip/win32/unz600dn.zip. You don't have to register this DLL to work, just place it in the ZipSearch program folder, or better still drop it into the System or System32 folder.

Revision 1.3.7 - 21 July 2016
A must have update as it fixes a serious bug when ejecting media or removing a USB drive. If a search within zip or rar files has been performed on a drive that gets invalidated the interface would freeze up, requiring a forced termination of ZipSearch. I was failing to increment the loop counter to exit out of the invalidation process within the cSearch class, du. Also, a couple of interface improvements.

Revision 1.3.8 - 23 July 2016
Fixed another couple of bugs: Wasn't filtering folder dates when date matching. Fixed a bug in size drop-down list and added ability to specify n byte, n kb or n gb sizes. Refined size and date filtering for greater precision (accurate cut-off now one day, and one byte: 1 byte or 0.001 kb). Added ability to 'save changes now'. I find 'save changes on exit' is a common but annoying way to set and keep settings as you want them.

Revision 1.3.9 - 27 July 2016
Added blocked folder icons to the treeview. Fixed a bug that failed to block folders again after selecting Refresh view from the context menu. Bug fix: wasn't converting recently modified file date to local time before comparing it to its stored local date. Bug fix: Problem of failing to receive some messages from the file system. Addressed this by queuing the file system messages and processing one at a time - 1.3.8 was firing on ALL messages! Wondered what that flickering was?

Revision 1.4.0 - 15 Aug 2016
Re-fixed bug that failed to block folders again after a Refresh. Fixed a bug when adding a USB drive: Multiple DriveAdded events would be triggered by the file system - event was repeatedly trying to add the same key to the treeview. Minor improvements: Added treeview icons for all drive types as well as blocked versions. Added option to specify alternate file viewer used in listview context menu.

Revision 1.4.1 - 1 Sept 2016
Improved opening multiple selected files into file viewer. Added by request the option to filter between selected dates, and between selected sizes.

Revision 1.4.2 - 26 Sept 2017
Fixed a couple of minor bugs. Revision prompted by the addition of many assembler functions to replace VB's slow string handling - noticable speed improvement. Added file Update context menu item - select files of the same name in the ListView, right-click and select Update to replace old versions of the same file name with the most recently modified.

Revision 1.4.3 - 16 Feb 2018
The speed improvements of revision 1.4.2 prompted the replacement of a couple more slow routines with assembler functions. The format file size routine previously required multiple floating point calculations per loop iteration, as well as string concatenation. Now only one string allocation and no floats, calculated with assembler - 10 times faster! The format file time required multiple file time api's and string concatenation. Now two api's (to local system time) and one string allocation, formated in assembler.

Revision 1.4.4 - 9 Apr 2018
Updated ZipSearch to use the user appdata folder for file extraction, should work successfully on all OS's. I discovered a bug fixed in Revision 1.3.3 had crept back in when I updated the RAR archive extraction module. When I downloaded a later version of the RAR library I updated the module to use the ..Ex and Unicode functions and incorrectly thought the bug had been removed. So I re-implimented the previous fix. Attempted to update side-by-side zip and rar DLL versioning but XP complained. See sub-folder named UnRAR_542 for more.

Revision 1.4.5 - 10 Apr 2018
Fixed bug introduced in 1.4.4. Thanks heaps to Lorin for the feedback - your info made it very easy to identify and fix :) I was caching a string pointer returned from a class property that was going out of scope - needed to copy it to local varaible.

Revision 1.4.6 - 14 Dec 2018
Minor fixes and improvements. Update prompted by comment from Marcio. This is just half of his request - multiple-search terms! Ability to search inside docx files yet to be done. Seems to be working pretty well, but please test and let me know of any problems.

Working pretty well now. Suggestions and bug reports welcome. Happy coding, Rd :)
