bool wxRegKey::QueryValue(const wxString& szValue, wxMemoryBuffer& buffer) const { if ( CONST_CAST Open(Read) ) { // first get the type and size of the data DWORD dwType, dwSize; m_dwLastError = RegQueryValueEx((HKEY) m_hKey, RegValueStr(szValue), RESERVED, &dwType, NULL, &dwSize); if ( m_dwLastError == ERROR_SUCCESS ) { if ( dwSize ) { const RegBinary pBuf = (RegBinary)buffer.GetWriteBuf(dwSize); m_dwLastError = RegQueryValueEx((HKEY) m_hKey, RegValueStr(szValue), RESERVED, &dwType, pBuf, &dwSize); buffer.UngetWriteBuf(dwSize); } else { buffer.SetDataLen(0); } } if ( m_dwLastError != ERROR_SUCCESS ) { wxLogSysError(m_dwLastError, _("Can't read value of key '%s'"), GetName().c_str()); return false; } return true; } return false; }
bool wxRegKey::SetValue(const wxString& szValue, long lValue) { if ( CONST_CAST Open() ) { m_dwLastError = RegSetValueEx((HKEY) m_hKey, RegValueStr(szValue), (DWORD) RESERVED, REG_DWORD, (RegString)&lValue, sizeof(lValue)); if ( m_dwLastError == ERROR_SUCCESS ) return true; } wxLogSysError(m_dwLastError, _("Can't set value of '%s'"), GetFullName(this, szValue)); return false; }
// return true if value exists bool wxRegKey::HasValue(const wxString& szValue) const { // this function should be silent, so suppress possible messages from Open() wxLogNull nolog; if ( !CONST_CAST Open(Read) ) return false; LONG dwRet = ::RegQueryValueEx((HKEY) m_hKey, RegValueStr(szValue), RESERVED, NULL, NULL, NULL); return dwRet == ERROR_SUCCESS; }
wxRegKey::ValueType wxRegKey::GetValueType(const wxString& szValue) const { if ( ! CONST_CAST Open(Read) ) return Type_None; DWORD dwType; m_dwLastError = RegQueryValueEx((HKEY) m_hKey, RegValueStr(szValue), RESERVED, &dwType, NULL, NULL); if ( m_dwLastError != ERROR_SUCCESS ) { wxLogSysError(m_dwLastError, _("Can't read value of key '%s'"), GetName().c_str()); return Type_None; } return (ValueType)dwType; }
bool wxRegKey::SetValue(const wxString& szValue, const wxString& strValue) { if ( CONST_CAST Open() ) { m_dwLastError = RegSetValueEx((HKEY) m_hKey, RegValueStr(szValue), (DWORD) RESERVED, REG_SZ, (RegString)wxMSW_CONV_LPCTSTR(strValue), (strValue.Len() + 1)*sizeof(wxChar)); if ( m_dwLastError == ERROR_SUCCESS ) return true; } wxLogSysError(m_dwLastError, _("Can't set value of '%s'"), GetFullName(this, szValue)); return false; }
bool wxRegKey::DeleteValue(const wxString& szValue) { if ( !Open() ) return false; m_dwLastError = RegDeleteValue((HKEY) m_hKey, RegValueStr(szValue)); // deleting a value which doesn't exist is not considered an error if ( (m_dwLastError != ERROR_SUCCESS) && (m_dwLastError != ERROR_FILE_NOT_FOUND) ) { wxLogSysError(m_dwLastError, _("Can't delete value '%s' from key '%s'"), szValue, GetName().c_str()); return false; } return true; }
bool wxRegKey::SetValue(const wxString& szValue, const wxMemoryBuffer& buffer) { #ifdef __TWIN32__ wxFAIL_MSG("RegSetValueEx not implemented by TWIN32"); return false; #else if ( CONST_CAST Open() ) { m_dwLastError = RegSetValueEx((HKEY) m_hKey, RegValueStr(szValue), (DWORD) RESERVED, REG_BINARY, (RegBinary)buffer.GetData(),buffer.GetDataLen()); if ( m_dwLastError == ERROR_SUCCESS ) return true; } wxLogSysError(m_dwLastError, _("Can't set value of '%s'"), GetFullName(this, szValue)); return false; #endif }
bool wxRegKey::QueryValue(const wxString& szValue, long *plValue) const { if ( CONST_CAST Open(Read) ) { DWORD dwType, dwSize = sizeof(DWORD); RegString pBuf = (RegString)plValue; m_dwLastError = RegQueryValueEx((HKEY) m_hKey, RegValueStr(szValue), RESERVED, &dwType, pBuf, &dwSize); if ( m_dwLastError != ERROR_SUCCESS ) { wxLogSysError(m_dwLastError, _("Can't read value of key '%s'"), GetName().c_str()); return false; } else { // check that we read the value of right type wxASSERT_MSG( IsNumericValue(szValue), wxT("Type mismatch in wxRegKey::QueryValue().") ); return true; } } else return false; }
bool wxRegKey::QueryValue(const wxString& szValue, wxString& strValue, bool WXUNUSED_IN_WINCE(raw)) const { if ( CONST_CAST Open(Read) ) { // first get the type and size of the data DWORD dwType=REG_NONE, dwSize=0; m_dwLastError = RegQueryValueEx((HKEY) m_hKey, RegValueStr(szValue), RESERVED, &dwType, NULL, &dwSize); if ( m_dwLastError == ERROR_SUCCESS ) { if ( !dwSize ) { // must treat this case specially as GetWriteBuf() doesn't like // being called with 0 size strValue.Empty(); } else { m_dwLastError = RegQueryValueEx((HKEY) m_hKey, RegValueStr(szValue), RESERVED, &dwType, (RegString)(wxChar*)wxStringBuffer(strValue, dwSize), &dwSize); // expand the var expansions in the string unless disabled #ifndef __WXWINCE__ if ( (dwType == REG_EXPAND_SZ) && !raw ) { DWORD dwExpSize = ::ExpandEnvironmentStrings(strValue.t_str(), NULL, 0); bool ok = dwExpSize != 0; if ( ok ) { wxString strExpValue; ok = ::ExpandEnvironmentStrings(strValue.t_str(), wxStringBuffer(strExpValue, dwExpSize), dwExpSize ) != 0; strValue = strExpValue; } if ( !ok ) { wxLogLastError(wxT("ExpandEnvironmentStrings")); } } #endif // __WXWINCE__ } if ( m_dwLastError == ERROR_SUCCESS ) { // check that it was the right type wxASSERT_MSG( !IsNumericValue(szValue), wxT("Type mismatch in wxRegKey::QueryValue().") ); return true; } } } wxLogSysError(m_dwLastError, _("Can't read value of '%s'"), GetFullName(this, szValue)); return false; }