#include "wx/string.h"
#include "wx/intl.h"
#include "wx/log.h"
-#include "wx/config.h" // for wxExpandEnvVars
#ifndef __WIN16__
#define REG_PARAM (LPDWORD)
#endif
+ // it might be unexpected to some that this function doesn't open the key
+ wxASSERT_MSG( IsOpened(), _T("key should be opened in GetKeyInfo") );
+
m_dwLastError = ::RegQueryInfoKey
(
(HKEY) m_hKey,
GetName().c_str());
return FALSE;
}
- else
- return TRUE;
+
+ return TRUE;
#else // Win16
wxFAIL_MSG("GetKeyInfo() not implemented");
// prevent a buggy program from erasing one of the root registry keys or an
// immediate subkey (i.e. one which doesn't have '\\' inside) of any other
// key except HKCR (HKCR has some "deleteable" subkeys)
- if ( m_strKey.IsEmpty() || (m_hRootKey != HKCR &&
- m_strKey.Find(REG_SEPARATOR) == wxNOT_FOUND) ) {
+ if ( m_strKey.IsEmpty() ||
+ ((m_hRootKey != (WXHKEY) aStdKeys[HKCR].hkey) &&
+ (m_strKey.Find(REG_SEPARATOR) == wxNOT_FOUND)) ) {
wxLogError(_("Registry key '%s' is needed for normal system operation,\ndeleting it will leave your system in unusable state:\noperation aborted."), GetFullName(this));
return FALSE;
#endif //Win32
-bool wxRegKey::QueryValue(const wxChar *szValue, wxString& strValue) const
+bool wxRegKey::QueryValue(const wxChar *szValue,
+ wxString& strValue,
+ bool raw) const
{
if ( CONST_CAST Open() ) {
#ifdef __WIN32__
pBuf,
&dwSize);
strValue.UngetWriteBuf();
+
+ // expand the var expansions in the string unless disabled
+ if ( (dwType == REG_EXPAND_SZ) && !raw )
+ {
+ DWORD dwExpSize = ::ExpandEnvironmentStrings(strValue, NULL, 0);
+ bool ok = dwExpSize != 0;
+ if ( ok )
+ {
+ wxString strExpValue;
+ ok = ::ExpandEnvironmentStrings
+ (
+ strValue,
+ strExpValue.GetWriteBuf(dwExpSize),
+ dwExpSize
+ ) != 0;
+ strExpValue.UngetWriteBuf();
+ strValue = strExpValue;
+ }
+
+ if ( !ok )
+ {
+ wxLogLastError(_T("ExpandEnvironmentStrings"));
+ }
+ }
}
if ( m_dwLastError == ERROR_SUCCESS ) {