Registry API Wrapper | CodeGuru

Registry API Wrapper

 Download Source Code and Example I personally find the Win32 Registry API to be overly complex for performing simple operations. The Win32 Registry API is very "rich". You can do a lot with it, but most of the time you just want to read or write a value. The error checking involved in doing even […]

Written By
CodeGuru Staff
CodeGuru Staff
Aug 29, 1998
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

 Download
Source Code and Example

I personally find the Win32 Registry API to be overly
complex for performing simple operations. The Win32 Registry API is very "rich".
You can do a lot with it, but most of the time you just want to read or write a value. The
error checking involved in doing even simple registry operations is enough to hide the
meaning of the code. Most of the time you either want the operation to succeed or fail as
a whole, you’re not interested in handling errors at each stage and performing recovery
operations…

I’ve seen many Win32 Registry API wrapper classes but all
of them failed to actually make it easier to use the registry than the API. Most have been
simple wrappers which add no value (apart from saving you the bother or having to pass the
HKEY to each function…).

CRegistryKey is essentially just a very simple wrapper around a HKEY. It adds value by
converting errors to exceptions, defaulting most of the rarely used parameters with
sensible values and providing STL style iterators for sub keys and values. All of the
Win32 Registry API  is present as member functions, but if you want to check for
errors without using exceptions there’s a conversion operator that will allow access to
the underlying HKEY.

CRegistryKey was designed to make code like this as easy as possible…

try
{
   CRegistryKey key = CRegistryKey(HKEY_LOCAL_MACHINE,
_T("SOFTWARE"));
  
   // for each sub key of this key…
  
   for (CRegistryKey::SubkeyIterator it = key.BeginSubkeyIteraton();
        it != key.EndSubkeyIteraton();
        ++it)
   {
      // Dump out the key’s name

      tcout << it.GetName() << endl;

      // Then display each value
  
      CRegistryKey subKey = it.OpenKey();
  
      for (CRegistryKey::ValueIterator val =
subKey.BeginValueIteration();
           val !=
subKey.EndValueIteration();  
           ++val)
      {
         tcout << " "
<< val.name() << T(" ") << val.valueAsString() << endl;
      }
   }
}
catch (CRegistryKey::Exception &e)
{
   e.MessageBox();
}

So that this article and code can be kept up to date more easily I’ve provided a link
to where the article is located on my own web pages. Read the
full article and download the source code
.

Last updated: 3 July 1998


CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.