X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d38f70b2494626c4c04dbec17b48d1029b7bcd10..1c9919467b422edf561753db25605bc7aa293b55:/src/msw/registry.cpp diff --git a/src/msw/registry.cpp b/src/msw/registry.cpp index 6ba78d3c25..57eea64341 100644 --- a/src/msw/registry.cpp +++ b/src/msw/registry.cpp @@ -19,6 +19,8 @@ #pragma hdrstop #endif +#if wxUSE_REGKEY + #ifndef WX_PRECOMP #include "wx/msw/wrapwin.h" #include "wx/string.h" @@ -292,6 +294,18 @@ void wxRegKey::SetHkey(WXHKEY hKey) Close(); m_hKey = hKey; + + // we don't know the parent of this key, assume HKLM by default + m_hRootKey = HKEY_LOCAL_MACHINE; + + // we don't know in which mode was this key opened but we can't reopen it + // anyhow because we don't know its name, so the only thing we can is to hope + // that it allows all the operations which we're going to perform on it + m_mode = Write; + + // reset old data + m_strKey.empty(); + m_dwLastError = 0; } // ---------------------------------------------------------------------------- @@ -312,7 +326,7 @@ wxString wxRegKey::GetName(bool bShortPrefix) const wxString str = bShortPrefix ? aStdKeys[key].szShortName : aStdKeys[key].szName; if ( !m_strKey.empty() ) - str << _T("\\") << m_strKey; + str << wxT("\\") << m_strKey; return str; } @@ -330,7 +344,7 @@ bool wxRegKey::GetKeyInfo(size_t *pnSubKeys, #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") ); + wxASSERT_MSG( IsOpened(), wxT("key should be opened in GetKeyInfo") ); m_dwLastError = ::RegQueryInfoKey ( @@ -383,7 +397,7 @@ bool wxRegKey::Open(AccessMode mode) m_dwLastError = ::RegOpenKeyEx ( (HKEY) m_hRootKey, - m_strKey.wx_str(), + m_strKey.t_str(), RESERVED, mode == Read ? KEY_READ : KEY_ALL_ACCESS, &tmpKey @@ -424,7 +438,7 @@ bool wxRegKey::Create(bool bOkIfExists) &tmpKey, &disposition); #else - m_dwLastError = RegCreateKey((HKEY) m_hRootKey, m_strKey.wx_str(), &tmpKey); + m_dwLastError = RegCreateKey((HKEY) m_hRootKey, m_strKey.t_str(), &tmpKey); #endif if ( m_dwLastError != ERROR_SUCCESS ) { wxLogSysError(m_dwLastError, _("Can't create registry key '%s'"), @@ -532,7 +546,7 @@ bool wxRegKey::CopyValue(const wxString& szValue, bool wxRegKey::Rename(const wxString& szNewName) { - wxCHECK_MSG( !m_strKey.empty(), false, _T("registry hives can't be renamed") ); + wxCHECK_MSG( !m_strKey.empty(), false, wxT("registry hives can't be renamed") ); if ( !Exists() ) { wxLogError(_("Registry key '%s' does not exist, cannot rename it."), @@ -696,7 +710,7 @@ bool wxRegKey::DeleteSelf() // now delete this key itself Close(); - m_dwLastError = RegDeleteKey((HKEY) m_hRootKey, m_strKey.wx_str()); + m_dwLastError = RegDeleteKey((HKEY) m_hRootKey, m_strKey.t_str()); // deleting a key which doesn't exist is not considered an error if ( m_dwLastError != ERROR_SUCCESS && m_dwLastError != ERROR_FILE_NOT_FOUND ) { @@ -940,12 +954,12 @@ bool wxRegKey::QueryValue(const wxString& szValue, #ifndef __WXWINCE__ if ( (dwType == REG_EXPAND_SZ) && !raw ) { - DWORD dwExpSize = ::ExpandEnvironmentStrings(strValue.wx_str(), NULL, 0); + DWORD dwExpSize = ::ExpandEnvironmentStrings(strValue.t_str(), NULL, 0); bool ok = dwExpSize != 0; if ( ok ) { wxString strExpValue; - ok = ::ExpandEnvironmentStrings(strValue.wx_str(), + ok = ::ExpandEnvironmentStrings(strValue.t_str(), wxStringBuffer(strExpValue, dwExpSize), dwExpSize ) != 0; @@ -954,7 +968,7 @@ bool wxRegKey::QueryValue(const wxString& szValue, if ( !ok ) { - wxLogLastError(_T("ExpandEnvironmentStrings")); + wxLogLastError(wxT("ExpandEnvironmentStrings")); } } #endif @@ -1159,7 +1173,7 @@ bool wxRegKey::Export(const wxString& filename) const return false; } - wxFFileOutputStream ostr(filename, _T("w")); + wxFFileOutputStream ostr(filename, wxT("w")); return ostr.Ok() && Export(ostr); #else @@ -1185,26 +1199,26 @@ FormatAsHex(const void *data, size_t size, wxRegKey::ValueType type = wxRegKey::Type_Binary) { - wxString value(_T("hex")); + wxString value(wxT("hex")); // binary values use just "hex:" prefix while the other ones must indicate // the real type if ( type != wxRegKey::Type_Binary ) - value << _T('(') << type << _T(')'); - value << _T(':'); + value << wxT('(') << type << wxT(')'); + value << wxT(':'); // write all the rest as comma-separated bytes value.reserve(3*size + 10); - const char * const p = wx_static_cast(const char *, data); + const char * const p = static_cast(data); for ( size_t n = 0; n < size; n++ ) { // TODO: line wrapping: although not required by regedit, this makes // the generated files easier to read and compare with the files // produced by regedit if ( n ) - value << _T(','); + value << wxT(','); - value << wxString::Format(_T("%02x"), (unsigned char)p[n]); + value << wxString::Format(wxT("%02x"), (unsigned char)p[n]); } return value; @@ -1231,7 +1245,7 @@ wxString wxRegKey::FormatValue(const wxString& name) const // quotes and backslashes must be quoted, linefeeds are not // allowed in string values rhs.reserve(value.length() + 2); - rhs = _T('"'); + rhs = wxT('"'); // there can be no NULs here bool useHex = false; @@ -1240,15 +1254,15 @@ wxString wxRegKey::FormatValue(const wxString& name) const { switch ( (*p).GetValue() ) { - case _T('\n'): + case wxT('\n'): // we can only represent this string in hex useHex = true; break; - case _T('"'): - case _T('\\'): + case wxT('"'): + case wxT('\\'): // escape special symbol - rhs += _T('\\'); + rhs += wxT('\\'); // fall through default: @@ -1259,7 +1273,7 @@ wxString wxRegKey::FormatValue(const wxString& name) const if ( useHex ) rhs = FormatAsHex(value, Type_String); else - rhs += _T('"'); + rhs += wxT('"'); } break; @@ -1270,7 +1284,7 @@ wxString wxRegKey::FormatValue(const wxString& name) const if ( !QueryValue(name, &value) ) break; - rhs.Printf(_T("dword:%08x"), (unsigned int)value); + rhs.Printf(wxT("dword:%08x"), (unsigned int)value); } break; @@ -1362,7 +1376,7 @@ bool wxRegKey::DoExport(wxOutputStream& ostr) const // dump all our values long dummy; wxString name; - wxRegKey& self = wx_const_cast(wxRegKey&, *this); + wxRegKey& self = const_cast(*this); bool cont = self.GetFirstValue(name, dummy); while ( cont ) { @@ -1406,7 +1420,7 @@ bool KeyExists(WXHKEY hRootKey, const wxString& szKey) if ( ::RegOpenKeyEx ( (HKEY)hRootKey, - szKey.wx_str(), + szKey.t_str(), RESERVED, KEY_READ, // we might not have enough rights for rw access &hkeyDummy @@ -1442,5 +1456,7 @@ inline void RemoveTrailingSeparator(wxString& str) inline const wxChar *RegValueStr(const wxString& szValue) { - return szValue.empty() ? (const wxChar*)NULL : szValue.wx_str(); + return szValue.empty() ? (const wxChar*)NULL : szValue.t_str(); } + +#endif // wxUSE_REGKEY