// - 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"
{
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 ||
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;
}
{
RemoveTrailingSeparator(m_strKey);
m_hRootKey = (WXHKEY) aStdKeys[keyParent].hkey;
- m_hKey = NULL;
+ m_hKey = (WXHKEY) NULL;
m_dwLastError = 0;
}
RemoveTrailingSeparator(m_strKey);
m_hRootKey = keyParent.m_hRootKey;
- m_hKey = NULL;
+ m_hKey = (WXHKEY) NULL;
m_dwLastError = 0;
}
// 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;
// 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
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;
{
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 )
if ( !str.IsEmpty() && str.Last() == REG_SEPARATOR )
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: <full path to file>, <icon index>
- // 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.After(',');
-
- // unless I misunderstand the format (may be index may be ommited, I
- // don't know)
- wxASSERT( !(strFullPath.IsEmpty() || strIndex.IsEmpty()) );
-
- 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;
-}
-
-