Since Last Major Reconstruction

Here's what's changed since this site has moved to our new server.

July 29, 2010
  • Added the KeyStuff code sample. Shows how to stuff the keyboard buffer from a console application. Includes the full source code for a command line utility (CDW) that you can use in place of CD to change directories using a browse for folder dialog.
June 28, 2010
  • Updated the Uptime code sample. Added the capability to call OpenProcess against system processes in Vista and Windows 7, by elevating to debug privileges in the current process. Also renames the CProcessInfo class to CProcessTimes, as that seemed more accurate..
April 26, 2010
  • Added the StartupInfo code sample. Provides a drop-in ready class module of various startup parameters requested by either the user or the calling process.
  • Updated the StopWatch code sample. Added an actual test app that shows how to time a hypothetical comparison between exponentiation and multiplication. Plus, another little demonstration of the (what I consider) the unreliabilty of QueryPerformanceCounter as an alternative to timeGetTime for benchmarks.
April 2, 2010
  • Updated the SendInput code sample (again). Found the need to add support for the AltGr key, which is supported natively by the operating system when it's using certain (non-US) keyboard layouts.
March 10, 2010
  • Added the MemStatus code sample. Shows how to determine the total and available amounts of installed physical memory, application virtual address space, and page file swap space. Also demonstrates how to go beyond the standard 2gb Win32 virtual address space limit in properly configured systems.
February 17, 2010
  • Updated the Console code sample. The method used to determine LaunchMode, by looking for known or suspected parent processes, was failing on x64 systems. Fixed that.
December 21, 2009
  • Updated the SendInput code sample (again). Turns out CAPSLOCK did bad things to the input string, so we had to compensate for that with a quick test and correction as needed.
December 16, 2009
  • Updated the SendInput code sample. Fixed a problem with high-order ASCII characters that didn't have a direct translation to specific keystrokes. Added support for a couple of weird exceptions, such as "~" and "{}}".
November 17, 2009
  • Added the SysInfo code sample. This one hooks the hidden top-level window that's present in every Classic VB app, to sink notifications whenever devices are added or removed from the system, when system settings change, and system power notifications.
November 3, 2009
  • Added the Streams code sample. Here's a drop-in ready class module that will enumerate Alternate Data Streams within any NTFS file or folder. It also offers a Kill method, since VB's native one croaks on ADS.
September 24, 2009
  • Added the Assoc code sample. Shows how to use AssocQueryString to return all sorts of useful information about any given file type. This API is far and above more useful than FindExectuable..
  • Updated the Which code sample. Added a "backup" method for finding the application associated with any given document filetype, due to a bug with the FindExecutable API and certain 5-letter file extensions.
August 26, 2009
  • Added the Which code sample. This is a simple console utility that finds any or all matching executable files on the search path, so you can sort out what's running if you have multiple copies installed. Will also find the executable associated with any existing document file.
August 7, 2009
  • Updated the Monitors code sample. Added numerous routines that will help restoring a window to a persisted position, including checks on whether that position is still onscreen (visible) and so on.
July 24, 2009
  • Updated the HookXP code sample. Added two new class modules that provide MouseWheel events and MouseEnter-MouseHover-MouseLeave events.
  • Updated the SendInput code sample. Added a few conditional constants that were undefined in VBA.
July 15, 2009
  • Updated the HookXP code sample. Changed the auto-unhook trigger from WM_DESTROY to WM_NCDESTROY. Stupid typo oversight.
July 2, 2009
  • Added the HookXP code sample. This shows how to subclass any window in your process, using a method built into Windows! Very slick, safe, and incredibly flexible. Will be featured in upcoming VSM Online column, and will definitely be enhanced as time goes on. One you'll want to be familiar with.
June 24, 2009
  • Updated the Console code sample, adding another demonstration program which modifies system environment variables. Also, generally re-organized the entire download, renaming the included projects and modules to make it easier to identify which was which, and recompiled all samples using VB6.
June 23, 2009
  • Updated the Uptime code sample, patching a critical error in the MRegCalls.bas file. If you downloaded this file before this date, please discard and redownload. The RegDeleteValue function calls the wrong API, as a result of a hasty cut/paste error, and instead recursively deletes an entire key. I cannot urge caution here strongly enough, which may be best illustrated by the fact that this is the first time in the nearly 12 years this site has existed that I've published such a routine. <sigh>
June 22, 2009
  • Updated the DualList code sample, adding another custom control to the project. The new ReorderList control contains a standard ListBox and two Command buttons, offering your user the opportunity to reorder the elements within the list by moving them up and down.
May 19, 2009
  • Added the StockFont code sample. Demonstrates a very simple way to use the old-fashioned block drawing characters by selecting a stock font (one that ships as part of Windows) into any control.
May 5, 2009
April 9, 2009
  • Added the Uptime code sample. This shows how to determine when the computer its running on was last rebooted. Actually two methods. One retrieves the last proper shutdown time, and the other retrieves the startup time.
March 31, 2009
  • Peter Young has granted permission for me to host vbAdvance, which is now freeware. Folks, this is the only add-in that I always have loaded in my IDE. You really shouldn't be with out it. It's officially "unsupported," but if you can read the help file and follow along with the packaged examples, you should get along just fine.
February 25, 2009
  • Decided that all samples that include executables will be compiled using VB6 from this point onward, as I feel that is the most ubiquitous ClassicVB runtime out there at this point in time.
  • Added the Monitors code sample. A drop-in ready class and standard module that together offer access to information about all monitors and display devices connected to a system.
  • Updated the SendInput code sample. Added support for Unicode characters being embedded within the sent string, and a trapdoor call to VB's native SendKeys if the application is running on Windows 95.
December 21, 2008
  • Added the SysFolders code sample. A drop-in ready class that offers instant discovery of where all the special system folders are located on the user's machine. Need to know where the My Music folder is? Here ya go. Need to know where to stick an INI file? Couldn't be simpler!
March 28, 2008
  • Added the SnapDialog code sample. A drop-in ready class that uses subclassing to detect when the user is dragging your form around, and snaps the form to the screen edges when it's within a preset number of pixels. Supports multiple monitors and taskbar position.
February 13, 2008
  • Updated the Grabber code sample. Major clean-up! Removed two of the methods that relied on subclassing and another that used window styles, as none of these really worked in XP or Vista. Added a new method that fully supports themed grab handles in XP and Vista, but also offers the standard grip all the way back to Windows 95.
February 7, 2008
  • Added the NetGrab code sample. Drop-in ready UserControl demonstrates how to download files asynchronously using nothing but native VB5/VB6 code.
November 27, 2007
  • Updated the SendInput code sample. Original version used the wrong constant for PrintScreen emulation. Also added a VB5 implementation of Split, so module will work in VB6, VBA, and VB5.
November 15, 2007
  • Added the SendInput code sample. This one provides a drop-in ready module that is a total functional replacement for the standard ClassicVB SendKeys statement, which was rather severely broken by Vista.
September 4, 2007
  • Visual Studio Magazine resumed publication of my old Classic VB column. The first few will focus on getting VB to cooperate with Vista, but ultimately I intend to refocus fully on the sort of down to Earth stuff I did previously.
June 18, 2007
  • Updated the DirDrill sample to add an AttributeMask property so that you can limit recursive file searches to only files with specific attributes.
April 26, 2007
  • Added the vbMarkUp online code colorization utility. This tool can be used to create code suitable for pasting into Microsoft Word, so that you can make a color printout. (I use an offline version of this tool to create the listings on my Samples pages.)
April 10, 2007
  • Added the NetCam code sample. Here's a full-blown UserControl, ready to drop into your projects. This demonstrates how to retrieve and display webcam (or any graphic!) from the internet, including how to transform a raw bitstream into an OLE StdPicture object.
March 22, 2007
  • Added the Locale code sample. This provides a drop-in ready class module that offers full read/write access to the system and user regional settings.
  • Posted a raw CShellLink.cls module that can be used together with the ShellLnk typelib provided on the VB5 disk to create new shortcut (LNK) files.
August 31, 2006
  • Updated the ConClip utility. An /append switch was added to the SetClip command line tool, that allows you to add text to an existing text entry on the Windows clipboard. The documentation for both this and the /add switch has been clarified a bit.
July 11, 2006
  • Updated the FileControls code sample. The FRM file used to demonstrate this UserControl was found to be corrupt (a PictureBox had replaced the NativeFileControl). Sorry about that.
June 8, 2006
  • Updated the Console code sample. Added three new methods (FlashWindow, ReadChar, ReadPassword) to the main console support module.
June 2, 2006
  • Added the FileControls code sample. This is a simple little usercontrol that combines the VB's native DriveListBox and DirListBox with a standard ListBox (masquerading as a FileListBox) to provide a drop-in ready file-picker for those quick-and-dirty applets that need to display a constant file choice ability. Rigged these three up together too many times to not finally take the plunge and make it ready to go.
  • Posted raw RFC 2822-compliant code module used to parse the date and time stamps from Internet headers, such as those used in email and newsgroup postings. Also provides a function to translate standard Date variable to Internet-ready string. Feedback desired on this one!
April 13, 2006
  • Added the UpDown code sample. This download provides a drop-in ready class module that can be a total replacement for the common control, potentially eliminating one dependency from your project. It was written during the downfall of VSM, with the intent that it would be published in my old Q&A column. For some reason, it's just been gathering dust in a corner of my hard disk.
February 21, 2006
  • Updated the PrevInst code sample. This classic sample used to be fully reliant on subclassing and use of WM_COPYDATA to send multiple file names to the original instance of an application. It is now updated to include a far simpler method which supports Windows native desire to initiate a DDE conversation with the application.
December 8, 2005
  • The End of Hardcore Visual Basic, Bruce McKinney's farewell to the community, is now hosted here. If you haven't already, be sure to peruse his thoughts on events of the past few years.
July 13, 2005
  • Updated the MovedMsg code sample. Reworked significant sections of this code, so that it could just as easily be used in VBA as it was in VB5/6. This mainly required removal of dependence on the Screen and App objects. Drop-in ready, now, for VBA too!
June 17, 2005
  • Updated the TimerObj code sample. Added an OCX to the bundle, to provide an additional edge of security within the VBA IDE. ClassicVB users shouldn't consider this a VBA-only solution, by any means, though. It far surpasses the native Timer control in many ways, including durations greater than one minute (of course). 
June 7, 2005
  • Added the TimerObj code sample. This project offers two drop-in ready modules, which together combine to provide a totally code-based timer object for use in VBA or other non-windowed situations.
  • Started tagging code samples that are deemed VBA-Ready! with a special logo (). While VBA UserForms are quite different from those in ClassicVB, the CLS and BAS modules are quite often indistinguishable and can be used in either. This logo will help you immediately find samples found to be useful in both arenas.
May 20, 2005
  • Added the Console Clipboard Utilities to the tools section. A pair of console utilities that read and write the Windows clipboard. They accept standard input, and write standard output, so they're fully functional with pipes and redirection. My scripter friends have enjoyed these for years; it was time to share with all.
May 12, 2005
  • Updated the HookMe code sample. I've really reworked this one, so that any class (form, usercontrol, or class module) can sink messages for any window, by implementing an IHookSink interface. Far cleaner than it used to be! I hope to get it included in the other samples here that include subclassing as part of their technique.
  • Updated the FormPair code sample. Now uses the newer IHookSink native subclassing interface to watch for window messages within the project's main form. Also includes identical functionality using the MsgHook control.
  • Updated the FullDrop code sample. Now uses the newer IHookSink native subclassing interface to watch for window messages within a helper class module.
  • Updated the kpIni code sample. Fixed a silly little oversight in the StripComments method of the CIniFile class, so that this functionality actually works now. D'oh.
  • Updated the StopWatch code sample. Added a new method that formats the elapsed time in HH:MM:SS, for longer periods.
  • Been very busy with "the petition" the last month or two, so haven't had a lot of time here - sorry. (You have signed the petition, right???) 
March 8, 2005
  • Updated the LongScroll code sample. A friend wrote to ask why this sample didn't support a Scroll event. I replied, but it does! Does not, he says.  Does too, retort I! Much to my embarrassment, I updated this sample in December 2003, but never actually uploaded it. Well, here it is.
February 7, 2005
  • Updated the kpIni code sample. Finally, ten years later, this sample has been updated as a drop-in ready, 32-bit, event-raising, INI-file enumerating class module. This was pretty much the first sample of mine that became wildly popular. Supposedly, INI files would be dead by now. I suspect you'll still find many, many uses for this one. Let me know if it's missing anything!
February 3, 2005
  • Added the DirDrill code sample. Encapsulates recursive use of the Dir function within an event-raising class. Includes a bonus module that recreates several new-to-VB6 string functions for VB5.
  • Added the MultiOE code sample. Shows how to call DLL functions in files you won't know the location of until runtime. Practical application that can be used to launch multiple instances of Outlook Express. Requires VB5 runtime.
January 14, 2005
  • The Feedback form was broken when the new site rolled out, but I believe it's now fixed. If you notice anything else that's amiss, I'd sure appreciate hearing about it.
January 13, 2005
  • I pulled the switch! We're live, on the new server, with a permanent redirect in place from the old one. I wonder if the complaints will start flowing in? Or does anyone still care? Questions, questions...
January 12, 2005
  • I believe I've finally nailed the design for the code sample pages. Everything's ASP driven now, and there's a single page that offers details on any available project, as you'll see if you jump to anything from the previous link. My goal is to provide a stable set of links, while maintaining the ability to easily update the site.
  • I think this means we're really ready to flip the switch, and redirect from the old server. What a long, strange trip it's been!
December 2, 2004
  • Updated the TimeZone code sample. The Offset property was returning a bizarre result in the eastern hemisphere. Flipping the sign cured that..
September 24, 2004
  • Updated the NetUser code sample. Fixed an issue when that occurred when the user wasn't a member of any local groups, and (finally) updated the code to be more VB5 optimized. This was one of the first Unicode samples worked out for VB4 (and it showed!).
September 8, 2004
  • Have, more or less, gotten the code sample pages all converted over to ASP, including one that cross-references APIs used in each sample project. In theory, this should make updates much more consistent as time goes on.
August 20, 2004
  • In the process of moving servers and rolling out an entirely new site design. Not quite ready to put redirection in place, as some of the old pages aren't transferred yet.
  • Moved the contents of Hardcore Visual Basic, by Bruce McKinney, over to the new server.
  • Moved what there was of Visual Basic 4 How-To over to the new server.
August 13, 2004
  • I now have 77 of 79 articles posted, and am ready to link them into the project descriptions.
  • Starting to rollout new code sample pages! Full descriptions yet to come.

Updates made to the Old Site

The following changes all occurred back when this site resided solely as a subweb on the domain.

August 3, 2004
  • Updated the HyperJmp code sample. Added an option to force the default browser to open a new window with each passed URL. Also provided an InstrRev function to use in pre-VB6 projects.
May 5, 2004
  • Updated the CmdLine code sample. Patched a lot of "interpretation" inconsistencies, in how this drop-in class separates command line arguments, and fixed a problem with embedded spaces in paths. Also updated to insure full VBA compatibility.
May 4, 2004
  • Updated the TimeZone code sample. Encapsulated all data returned by, and derived from, a call to GetTimeZoneInformation into an easy-to-use class module.
April 29, 2004
  • Updated MapFilecode sample. Finally(!) came up with an interesting demo, which maps an entire file into a byte array, then XOr's the file's contents by an arbitrary password to provide rudimentary encryption/decryption capabilities.
April 23, 2004
  • Updated StrBldr code sample. Added a new Adaptive Sizing technique that dramatically improves performance when resizing the buffer repeatedly.
March 18, 2004
  • Added the Console code sample. This download includes a support module that does just about anything imaginable related to developing console applications in VB5 and VB6.
December 18, 2003
  • Updated WndPick code sample. Added a module that supports outlining a window (ala Spy++) given its hWnd.
July 1, 2002
  • Updated ClipEx code sample. Patched a resource leak in the terminate event of the CMemoryDC class.
  • Updated MemoryDC code sample. Patched a resource leak in the terminate event of the CMemoryDC class.
March 12, 2002
  • Updated Tray code sample. Added support to restore tray icon after an Explorer crash.
March 7, 2002
  • Updated the DrvInfo code sample. The FormatSize$ function now returns proper strings for volume sizes ranging over 10Gb (up to 999Tb).
February 13, 2002
  • Updated the StopWatch code sample. This class-based drop-in timer now reprograms the system's clock chip to operate at 1ms resolution for the duration of its existence. A long-overdue update. 
November 25, 2001
  • Added Language Stability: Code Assets to the TipSheets section. A whitepaper defining what the term "Language Stability" really means, and the tragic loss faced in this area by those falling for the dotnet marketing platitudes.
November 20, 2001
  • Added the PrnInfo code sample. Does pretty much everything the Printers collection and Printer objects don't, with regard to spooler and printer queues, and much more.
November 2, 2001
  • Added the Lasso code sample. Provides two native ways, simple and simpler, to let the user draw a selection rectangle on a Picture control.
  • Added the MdiBack code sample. Drop-in, set it and forget it, class for VB6 that handles all the tedium of MDI background graphics.
October 26, 2001
  • Added the CmdLine code sample. Shows basic command line processing stuff, including parsing the arguments. 
  • Updated the TaskList code sample. CTaskList.cls was display the main window's Caption, rather than App.Title, when querying VB-authored applications. 
August 15, 2001
  • Updated the OpSys code sample. Now recognizes Windows XP and also supports the full OSVERSIONINFOEX structure (where available).
July 3, 2001
  • Added the DualList code sample. This is a very simple custom control that allows a user to move items between two listboxes.
  • Added the Flood code sample. Recreates QuickBasic's Paint command to provide floodfills.
  • Updated the FormBdr code sample. Added an example that uses DrawEdge for a 3D border on "borderless" form.
  • Added the Rgb code sample. Demonstrates breaking apart RGB colors into constituent Red, Green, and Blue values.
  • Updated the TaskList code sample. Now includes full End Task capabilities.
April 17, 2001
  • Added the ClipEx code sample. Classic VB rendition of the native Clipboard object; written to give VBA these capabilities.
  • Added the FontPre code sample. Preview a TrueType font file without permanently installing it to the system.
  • Added the StrBldr code sample. Increases string concatenation performance by orders of magnitude.
March 19, 2001
February 23, 2001
  • Updated the MemDC code sample. Tracking variables weren't being updated in CMemoryDC's private UserBitmap method.
February 8, 2001
January 16, 2001
  • Updated the CustomBlt code sample. On systems where it's available, the TransBlt routine now calls the TransparentBlt API as an optimization.
January 9, 2001
  • Added the MemoryDC code sample. Provides lots of in-memory device context capabilities.
  • Updated the FileInfo code sample. Added workaround to retrieve version info from Microsoft Office 95/97 binaries.
December 15, 2000
  • Updated the FormBdr code sample. Added support for MDI forms, and sync'd sysmenu with control buttons.
December 6, 2000
  • Updated the Hello code sample. Patched a really stupid oversight (with GetStartupInfo) that causes a GPF on Win2000.
  • Updated the HexDump code sample. Added PointerToString and PointerToDWord functions.
November 30, 2000
  • Added the CloneObjs code sample. Traditional (VB4/5/6) method of cloning class objects.
  • Added the FormBdr code sample. Say good-bye to read-only at runtime form properties!
  • Added the Hello code sample. HELLOWIN meets VB. An API-only VB skeletal start to window creation and management.
  • Added the HexDump code sample. Method to dump, in hexadecimal/ascii notation any accessible region of memory.
  • Added the MovedMsg code sample. Position MsgBox dialogs anywhere you'd like.
  • Added the NetDomain code sample. Determine information about domain (Windows 2000).
July 10, 2000
June 23, 2000
June 13, 2000
  • Added the Twiddle code sample. All the code you'll ever likely need for bit-twiddling and byte-busting, all in pure VB.
  • Added the ObjArrays code sample. Shows how to sink events from an array of your own objects.
  • Updated CTaskList.cls (yes, again), which is used in both AltTab and TaskList. It now correctly replicates the Alt+Tab dialog's icon selection with multi-form VB apps.
June 9, 2000
  • Completely rewrote TaskList code sample. Recreates in nearly every detail the Applications tab of NT's Task Manager.
  • Updated the AltTab code sample. The CTaskList class was again completely rewritten to support new chores demanded by the TaskList demo.
May 25, 2000
  • Received permission from Microsoft to republish Hardcore Visual Basic, Version 5.0, 2nd Edition, here on MVPS.ORG, as it's now out of print and was dropped in the April 2000 MSDN Library.
May 19, 2000
  • Added the EnumMsgs code sample. Reveals the undocumented method used to obtain the name of registered window messages.
May 18, 2000
  • Updated the AltTab code sample. Completely reworked the algorithm that determines which windows end up in the Alt+Tab order. No more special cases or crazy exceptions!
May 10, 2000
  • Added the EnumRes code sample. Demos resource enumeration and system callbacks into a class or form through Implements.
  • Added the MapFile code sample. Provides a drop-in class for memory-mapped file i/o.
  • Added the MouseEvent code sample. Demos CBT techniques for controlling mouse movement, button clicks, and wheel spins.
April 12, 2000
February 8, 2000
December 16, 1999
  • Added the NCMetrics code sample. Class provides many non-client metrics, including system fonts (as StdFont objects).
  • Added the Wmf2Emf code sample. Module loads any metafile, in particular those that use the Adobe Placeable Header format which aren't directly API-accessible.
December 7, 1999
  • Added the AltTab code sample. Shows how to determine and display Windows' Alt+Tab order.
  • Added the AppIcon code sample. Shows how to change an application's icon so it shows up correctly in Alt+Tab dialog.
  • Added the LongScroll code sample. Provides a class that maps Long values into intrinsic scrollbar's Integer properties.
October 20, 1999
  • Updated the RegSettings code sample (again <sigh>). The GetAllSettings methods had, ahem, a few "issues" that weren't yet resolved. Seems to be fully functional now.
October 14, 1999
  • Updated the WinRgn code sample. Added the ability to bring up the standard system menu when right-clicking anywhere on the irregular form.
October 7, 1999
  • Added the FormPair code sample. Addresses toolwindow issues, such as moving in sync and maintaining the active appearance of the main form when toolwindow has focus.
  • Updated the RegSettings code sample. Patched a nasty bug that caused some weird mirroring problems when saving an empty string. Also added a GetAllSettings emulation to the class.
September 5, 1999
  • Added the Splash code sample. A simple little demo that belongs in everyone's toolchest. Gives your About/Splash form a more professional touch.
August 23, 1999
  • Added the PassSniff code sample. Enumerates all windows on system, sniffing for ones attempting to hide a password.
July 28, 1999
  • Updated the UncName code sample. Added a workaround to avoid Win95's refusal to return success from WNetGetUniversalName. See Q131416 for details.
  • Updated the FileInfo (again) code sample. Streamlined attribute setting a bit, and fixed a bug in the UI that prevented smooth tab switching. This bug only affected the demo UI.
July 5, 1999
  • Updated the FileInfo code sample. The CFileInfo class was enhanced to allow setting new timestamps (Created, Modified, Accessed) and setting specific file attributes. Previously, these properties were read-only.
  • Updated the ApiErrMsg on the Tools Page. Added the capability to extract error message resources from DLLs (including Internet and NT networking) and now include the full source with the download.
June 22, 1999
  • Added the DrvInfo code sample. Obtains most useful information from any drive on your system.
  • Updated the AniCtrl, ClipView, FullDrop, Grabber, and HookMe code sample. All five projects use the HookMe module which was the focus of the update. Previously, user resources could leak if a window wasn't properly unhooked, because RemoveProp wasn't being called. This is now addressed, as well as a watch on WM_DESTROY to unhook explicitly as the window is being torn down.
May 28, 1999
  • Added the HyperLabel code sample. A fully-functional, windowless, transparent background usercontrol authored in VB6. Offers hyperlink behavior to text or images.
  • Added the UncName code sample. Shows how to translate drive-based filespec to UNC format.
March 31, 1999
March 27, 1999
March 11, 1999
  • Added HookMe, which includes an updated MHookMe.bas module that can be used for native subclassing in VB5 and higher.
February 27, 1999
  • Added an API cross-reference, which points to which VB samples on this site use which API calls. I hope this helps you track down a sample that solves the problem you're working on.
  • Updated the Grabber, adding two new examples which use the Marlett font to display grab handles. One example is a simple (uncompiled) UserControl that can be dropped into any project.
  • Modified the main "home page" so that you can now store a "non-active" version (no music or quotes) of this web site in your Favorites.
February 20, 1999
  • Added the Slurp code sample. This demo uses the vbInet server (below) to slurp a list of URLs from the internet to local storage.
  • Added to the Controls/Tools page. This tool wraps a lot of the WinInet library into an ActiveX EXE server for use by VB programs. Download also contains the Slurp demo mentioned above.
February 15, 1999
  • Added the Grabber code sample. This demo shows how to add a size grip to the lower-right corner of any form. Includes native subclassing demo.
  • Updated the LVStyles, adding the ability to set the header style to either Flat or 3D. Flat headers don't react to user clicks, thus avoiding the appearance of being able to sort. Also added an Important Note on the consequences of sorting a ListView via the API.
January 28, 1999
  • Updated RegSettings, correcting an embarrassing oversight! Calls to RegCloseKey were not always being made when they should have. Just another good reason to run NT, eh? ;-)
January 20, 1999
  • Added the TimeZone code sample. This demo shows how call the GetTimeZoneInformation API, and interpret the returned results.
  • Added the DrvMap code sample. This demo shows how to convert a mapped drive letter to it's UNC sharename.
  • Updated StatProg, adding a TextOnly property to the CProgressBarEx class. Setting this property to True will cause the designated status bar panel to behave as it normally would, rather than display a progress bar within it.
January 11, 1999
  • Updated Spool, patching a truly awful use of vbNullString so that it correctly passes a NULL pointer. Solves problems with OpenPrinter call sometimes failing under NT.
January 1, 1999
  • Updated ListSearch, adding a new CComboSearch class which enhances standard ComboBox controls to offer "type-o-matic" support.
December 11, 1998
  • Added the NetConnect code sample, which shows how to determine whether your application has access to the internet.
December 4, 1998
  • Added RunOnce code sample, which shows how to have your app start at login.
  • Added a link to on the Tools page. This is a copy of the Declares that I use myself.
  • Added a link to a new Hot Downloads page from the main Contents frame. Here you can see what folks have been downloading in the last week.
November 12, 1998
  • Updated PrevInst to use VB6-specific classnames in calls to FindWindow, so the sample will work in either VB5 or VB6 dependent on a conditional constant.
  • Added a new page ranking the most popular downloads from this site.
October 29, 1998
October 27, 1998
  • Added the ForceFore code sample. This demo shows how to code a ForceForegroundWindow routine that gets around the lame limitations Microsoft introduced to SetForegroundWindow under Win98 and Windows 2000.
  • Added the TaskList code sample. Uses EnumWindows to build a replica of the Task List.
October 21, 1998
  • Updated FileInfo and reposted code sample. Patched a slow resource leak that was caused by not calling DestroyIcon on the handles returned from SHGetFileInfo.
October 19, 1998
  • Added the ClipFileCopy code sample. Demonstrates "copying" files to, and "pasting" file from, the clipboard.
October 9, 1998
October 2, 1998
  • Added the TimedMsg code sample. An example of how to add a time-out to a standard MsgBox.
  • Added the Tipsheet, "Add a Time-out to Standard MsgBox", which shows the simplest possible way to do just that.
  • Added the OpSys code sample. This demo uses the COpSysInfo class to obtain all the information made available by GetVersionEx. Updated for Win98.
September 10, 1998
  • Added a Feedback page. Not to be confused with a tech support avenue, this is merely a way for you to tell me what about this site has you honked off, or (if you're really bored) what you liked about it.
  • Added an Awards page. A few folks have decided to honor me for this site, so here's my thanks to them!
August 20, 1998
  • Added the StatProg code sample. A class-based example of how to embed a progress bar within a standard StatusBar control.
  • Added the TreeRecurse code sample. A simple little demo showing how to recursively walk all nodes at and below any given node in a TreeView. Useful for mass expansion or collapsing, and so on.
  • Updated FileInfo and reposted code sample. This project demonstrates how to retrieve various pieces of information from any file, including version data. Fixed one bug in determining LangaugeID and added support for UNC filespecs to the ProperCasePath function.
August 14, 1998
  • Added the PolyBtn code sample. This project demonstrates how to create an irregularly shaped UserControl in either VB5 or VB6.
  • Added the SyncEvts code sample. This project demonstrates how to share events amongst multiple object instances.
  • Added this page! Before now, pretty much the whole web site was new or updated.
Early August 1998