X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/040f0110fc3aa931eff3c245518aabbbd934f3f5..b82827dd43caa489eade15cc02edef7fb79e8c20:/src/msw/registry.cpp diff --git a/src/msw/registry.cpp b/src/msw/registry.cpp index a2f1b268e9..5d44fc5a73 100644 --- a/src/msw/registry.cpp +++ b/src/msw/registry.cpp @@ -12,13 +12,9 @@ // - add high level functions (RegisterOleServer, ...) /////////////////////////////////////////////////////////////////////////////// -// ============================================================================ -// declarations -// ============================================================================ - -// ---------------------------------------------------------------------------- -// headers -// ---------------------------------------------------------------------------- +#ifdef __GNUG__ +#pragma implementation "registry.h" +#endif // for compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -31,9 +27,10 @@ #include "wx/string.h" #include "wx/intl.h" #include "wx/log.h" - #include "wx/config.h" // for wxExpandEnvVars +#ifndef __WIN16__ + // Windows headers /* #define STRICT @@ -148,7 +145,7 @@ wxRegKey::StdKey wxRegKey::ExtractKeyName(wxString& strKey) { wxString strRoot = strKey.Left(REG_SEPARATOR); - HKEY hRootKey; + HKEY hRootKey = 0; size_t ui; for ( ui = 0; ui < nStdKeys; ui++ ) { if ( strRoot.CmpNoCase(aStdKeys[ui].szName) == 0 || @@ -198,7 +195,7 @@ wxRegKey::wxRegKey() wxRegKey::wxRegKey(const wxString& strKey) : m_strKey(strKey) { m_hRootKey = (WXHKEY) aStdKeys[ExtractKeyName(m_strKey)].hkey; - m_hKey = NULL; + m_hKey = (WXHKEY) NULL; m_dwLastError = 0; } @@ -207,7 +204,7 @@ wxRegKey::wxRegKey(StdKey keyParent, const wxString& strKey) : m_strKey(strKey) { RemoveTrailingSeparator(m_strKey); m_hRootKey = (WXHKEY) aStdKeys[keyParent].hkey; - m_hKey = NULL; + m_hKey = (WXHKEY) NULL; m_dwLastError = 0; } @@ -225,7 +222,7 @@ wxRegKey::wxRegKey(const wxRegKey& keyParent, const wxString& strKey) RemoveTrailingSeparator(m_strKey); m_hRootKey = keyParent.m_hRootKey; - m_hKey = NULL; + m_hKey = (WXHKEY) NULL; m_dwLastError = 0; } @@ -478,7 +475,7 @@ bool wxRegKey::DeleteValue(const char *szValue) return FALSE; #ifdef __WIN32__ - m_dwLastError = RegDeleteValue((HKEY) m_hKey, szValue); + m_dwLastError = RegDeleteValue((HKEY) m_hKey, (char*) (const char*) szValue); if ( m_dwLastError != ERROR_SUCCESS ) { wxLogSysError(m_dwLastError, _("can't delete value '%s' from key '%s'"), szValue, GetName().c_str()); @@ -512,7 +509,7 @@ bool wxRegKey::HasValue(const char *szValue) const #ifdef __WIN32__ if ( CONST_CAST Open() ) { - return RegQueryValueEx((HKEY) m_hKey, szValue, RESERVED, + return RegQueryValueEx((HKEY) m_hKey, (char*) (const char*) szValue, RESERVED, NULL, NULL, NULL) == ERROR_SUCCESS; } else @@ -526,6 +523,9 @@ bool wxRegKey::HasValue(const char *szValue) const // returns TRUE if this key has any subkeys bool wxRegKey::HasSubkeys() const { + // suppress possible messages from GetFirstKey() + wxLogNull nolog; + // just call GetFirstKey with dummy parameters wxString str; long l; @@ -535,6 +535,9 @@ bool wxRegKey::HasSubkeys() const // returns TRUE if given subkey exists bool wxRegKey::HasSubKey(const char *szKey) const { + // this function should be silent, so suppress possible messages from Open() + wxLogNull nolog; + if ( CONST_CAST Open() ) return KeyExists(m_hKey, szKey); else @@ -548,7 +551,7 @@ wxRegKey::ValueType wxRegKey::GetValueType(const char *szValue) return Type_None; DWORD dwType; - m_dwLastError = RegQueryValueEx((HKEY) m_hKey, szValue, RESERVED, + m_dwLastError = RegQueryValueEx((HKEY) m_hKey, (char*) (const char*) szValue, RESERVED, &dwType, NULL, NULL); if ( m_dwLastError != ERROR_SUCCESS ) { wxLogSysError(m_dwLastError, _("can't read value of key '%s'"), @@ -566,7 +569,7 @@ wxRegKey::ValueType wxRegKey::GetValueType(const char *szValue) bool wxRegKey::SetValue(const char *szValue, long lValue) { if ( CONST_CAST Open() ) { - m_dwLastError = RegSetValueEx((HKEY) m_hKey, szValue, RESERVED, REG_DWORD, + m_dwLastError = RegSetValueEx((HKEY) m_hKey, szValue, (DWORD) RESERVED, REG_DWORD, (RegString)&lValue, sizeof(lValue)); if ( m_dwLastError == ERROR_SUCCESS ) return TRUE; @@ -582,7 +585,7 @@ bool wxRegKey::QueryValue(const char *szValue, long *plValue) const if ( CONST_CAST Open() ) { DWORD dwType, dwSize = sizeof(DWORD); RegString pBuf = (RegString)plValue; - m_dwLastError = RegQueryValueEx((HKEY) m_hKey, szValue, RESERVED, + m_dwLastError = RegQueryValueEx((HKEY) m_hKey, (char*) (const char*) szValue, RESERVED, &dwType, pBuf, &dwSize); if ( m_dwLastError != ERROR_SUCCESS ) { wxLogSysError(m_dwLastError, _("can't read value of key '%s'"), @@ -609,11 +612,11 @@ bool wxRegKey::QueryValue(const char *szValue, wxString& strValue) const #ifdef __WIN32__ // first get the type and size of the data DWORD dwType, dwSize; - m_dwLastError = RegQueryValueEx((HKEY) m_hKey, szValue, RESERVED, + m_dwLastError = RegQueryValueEx((HKEY) m_hKey, (char*) (const char*) szValue, RESERVED, &dwType, NULL, &dwSize); if ( m_dwLastError == ERROR_SUCCESS ) { RegString pBuf = (RegString)strValue.GetWriteBuf(dwSize); - m_dwLastError = RegQueryValueEx((HKEY) m_hKey, szValue, RESERVED, + m_dwLastError = RegQueryValueEx((HKEY) m_hKey, (char*) (const char*) szValue, RESERVED, &dwType, pBuf, &dwSize); strValue.UngetWriteBuf(); if ( m_dwLastError == ERROR_SUCCESS ) { @@ -644,7 +647,7 @@ bool wxRegKey::SetValue(const char *szValue, const wxString& strValue) { if ( CONST_CAST Open() ) { #ifdef __WIN32__ - m_dwLastError = RegSetValueEx((HKEY) m_hKey, szValue, RESERVED, REG_SZ, + m_dwLastError = RegSetValueEx((HKEY) m_hKey, szValue, (DWORD) RESERVED, REG_SZ, (RegString)strValue.c_str(), strValue.Len() + 1); if ( m_dwLastError == ERROR_SUCCESS ) @@ -798,141 +801,6 @@ void RemoveTrailingSeparator(wxString& str) str.Truncate(str.Len() - 1); } -// ============================================================================ -// global public functions -// ============================================================================ - -bool GetExtensionFromMimeType(wxString *pExt, const wxString& strMimeType) -{ - // @@@ VZ: I don't know of any official documentation which mentions this - // location, but as a matter of fact IE uses it, so why not we? - static const char *szMimeDbase = "MIME\\Database\\Content Type\\"; - - wxString strKey = szMimeDbase; - strKey << strMimeType; - - // suppress possible error messages - wxLogNull nolog; - wxRegKey key(wxRegKey::HKCR, strKey); - if ( key.Open() ) { - if ( key.QueryValue("Extension", *pExt) ) - return TRUE; - } - - // no such MIME type or no extension for it - return FALSE; -} - -bool GetMimeTypeFromExtension(wxString *pMimeType, const wxString& strExt) -{ - wxCHECK( !strExt.IsEmpty(), FALSE ); - - // add the leading point if necessary - wxString str; - if ( strExt[0] != '.' ) { - str = '.'; - } - str << strExt; - - // suppress possible error messages - wxLogNull nolog; - wxRegKey key(wxRegKey::HKCR, str); - if ( key.Open() ) { - if ( key.QueryValue("Content Type", *pMimeType) ) - return TRUE; - } - - // no such extension or no content-type - return FALSE; -} - -bool GetFileTypeFromExtension(wxString *pFileType, const wxString& strExt) -{ - wxCHECK( !strExt.IsEmpty(), FALSE ); - - // add the leading point if necessary - wxString str; - if ( strExt[0] != '.' ) { - str = '.'; - } - str << strExt; - - // suppress possible error messages - wxLogNull nolog; - wxRegKey key(wxRegKey::HKCR, str); - if ( key.Open() ) { - if ( key.QueryValue("", *pFileType) ) // it's the default value of the key - return TRUE; - } - - // no such extension or no value - return FALSE; -} - -bool GetFileTypeIcon(wxIcon *pIcon, const wxString& strFileType) -{ - wxCHECK( !strFileType.IsEmpty(), FALSE ); - - wxString strIconKey; - strIconKey << strFileType << REG_SEPARATOR << "DefaultIcon"; - - // suppress possible error messages - wxLogNull nolog; - wxRegKey key(wxRegKey::HKCR, strIconKey); - - if ( key.Open() ) { - wxString strIcon; - if ( key.QueryValue("", strIcon) ) { // it's the default value of the key - // the format is the following: , - // NB: icon index may be negative as well as positive and the full path - // may contain the environment variables inside '%' - wxString strFullPath = strIcon.Before(','), - strIndex = strIcon.Right(','); - - // index may be omitted, in which case Before(',') is empty and - // Right(',') is the whole string - if ( strFullPath.IsEmpty() ) { - strFullPath = strIndex; - strIndex = "0"; - } - - wxString strExpPath = wxExpandEnvVars(strFullPath); - int nIndex = atoi(strIndex); - - HICON hIcon = ExtractIcon(GetModuleHandle(NULL), strExpPath, nIndex); - switch ( (int)hIcon ) { - case 0: // means no icons were found - case 1: // means no such file or it wasn't a DLL/EXE/OCX/ICO/... - wxLogDebug("incorrect registry entry '%s': no such icon.", - GetFullName(&key)); - break; - - default: - pIcon->SetHICON((WXHICON)hIcon); - return TRUE; - } - } - } - - // no such file type or no value or incorrect icon entry - return FALSE; -} - -bool GetFileTypeDescription(wxString *pDesc, const wxString& strFileType) -{ - wxCHECK( !strFileType.IsEmpty(), FALSE ); - - // suppress possible error messages - wxLogNull nolog; - wxRegKey key(wxRegKey::HKCR, strFileType); - - if ( key.Open() ) { - if ( key.QueryValue("", *pDesc) ) // it's the default value of the key - return TRUE; - } - - // no such file type or no value - return FALSE; -} - +#endif + // __WIN16__