Querying the Windows Registry
Dec 15 2012 ยท Win32 Platform
I’ve always considered the Windows Registry to be a pretty awful piece of technology and a terrible way to store system and application settings. That said, if you’re doing Windows development, you’re probably going to have to touch it at some point. I was digging through some old C++ code, and came across some code to get the current version of Flash installed on the system (I can’t remember why I need to do this at all), which I think serves a good example of how to query the registry.
#include <iostream>
#include <windows.h>
int main()
{
LONG ret;
HKEY result;
// open the key "HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayerPlugin"
ret = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Macromedia\\FlashPlayerPlugin", 0, KEY_QUERY_VALUE, &result);
if(ret != ERROR_SUCCESS)
return 1;
// allocate 64 wide chars to hold value
DWORD dataLen = 64;
wchar_t* data = new wchar_t[dataLen];
// query the value of "Version" for the key we opened
ret = RegQueryValueExW(result, L"Version", NULL, NULL, (LPBYTE)data, &dataLen);
RegCloseKey(result);
if(ret != ERROR_SUCCESS)
return 2;
// put the value in a wide string and output it
std::wstring versionStr(data);
std::wcout << versionStr.c_str();
// memory cleanup
delete [] data;
return 0;
}
The code required some modification as the name name of the key and value has since changed (FlashPlayerPlugin was previously FlashPlayer, Version was previous CurrentVersion).