registry.cpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:7k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * registry.cpp: Windows Registry Manipulation
  3.  ****************************************************************************
  4.  * Copyright (C) 2008 the VideoLAN team
  5.  * $Id: 263a3bf556eac98eb5e9a51c0c1dd556b72224b2 $
  6.  *
  7.  * Authors: Andre Weber <WeberAndre # gmx - de>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifdef HAVE_CONFIG_H
  24. # include "config.h"
  25. #endif
  26. #ifdef WIN32
  27. #include "registry.hpp"
  28. QVLCRegistry::QVLCRegistry( HKEY rootKey )
  29. {
  30.     m_RootKey = rootKey;
  31. }
  32. QVLCRegistry::~QVLCRegistry( void )
  33. {
  34. }
  35. bool QVLCRegistry::RegistryKeyExists( const char *path )
  36. {
  37.     HKEY keyHandle;
  38.     if(  RegOpenKeyEx( m_RootKey, path, 0, KEY_READ, &keyHandle ) == ERROR_SUCCESS )
  39.     {
  40.         RegCloseKey( keyHandle );
  41.         return true;
  42.     }
  43.     return false;
  44. }
  45. bool QVLCRegistry::RegistryValueExists( const char *path, const char *valueName )
  46. {
  47.     HKEY keyHandle;
  48.     bool temp = false;
  49.     DWORD size1;
  50.     DWORD valueType;
  51.     if(  RegOpenKeyEx( m_RootKey, path, 0, KEY_READ, &keyHandle ) == ERROR_SUCCESS )
  52.     {
  53.         if( RegQueryValueEx( keyHandle, valueName, NULL,
  54.                              &valueType, NULL, &size1 ) == ERROR_SUCCESS )
  55.         {
  56.            temp = true;
  57.         }
  58.         RegCloseKey( keyHandle );
  59.     }
  60.     return temp;
  61. }
  62. void QVLCRegistry::WriteRegistryInt( const char *path, const char *valueName, int value )
  63. {
  64.     HKEY keyHandle;
  65.     if(  RegCreateKeyEx( m_RootKey, path, 0, NULL, REG_OPTION_NON_VOLATILE,
  66.                          KEY_WRITE, NULL, &keyHandle, NULL )  == ERROR_SUCCESS )
  67.     {
  68.         RegSetValueEx( keyHandle, valueName, 0, REG_DWORD,
  69.                 (LPBYTE)&value, sizeof( int ) );
  70.         RegCloseKey( keyHandle );
  71.     }
  72. }
  73. void QVLCRegistry::WriteRegistryString( const char *path, const char *valueName, const char *value )
  74. {
  75.     HKEY keyHandle;
  76.     if(  RegCreateKeyEx( m_RootKey, path, 0, NULL, REG_OPTION_NON_VOLATILE,
  77.                          KEY_WRITE, NULL, &keyHandle, NULL )  == ERROR_SUCCESS )
  78.     {
  79.         RegSetValueEx( keyHandle, valueName, 0, REG_SZ, (LPBYTE)value,
  80.                 (DWORD)( strlen( value ) + 1 ) );
  81.         RegCloseKey( keyHandle );
  82.     }
  83. }
  84. void QVLCRegistry::WriteRegistryDouble( const char *path, const char *valueName, double value )
  85. {
  86.     HKEY keyHandle;
  87.     if( RegCreateKeyEx( m_RootKey, path, 0, NULL, REG_OPTION_NON_VOLATILE,
  88.                        KEY_WRITE, NULL, &keyHandle, NULL ) == ERROR_SUCCESS )
  89.     {
  90.         RegSetValueEx( keyHandle, valueName, 0, REG_BINARY, (LPBYTE)&value, sizeof( double ) );
  91.         RegCloseKey( keyHandle );
  92.     }
  93. }
  94. int QVLCRegistry::ReadRegistryInt( const char *path, const char *valueName, int default_value ) {
  95.     HKEY keyHandle;
  96.     int tempValue;
  97.     DWORD size1;
  98.     DWORD valueType;
  99.     if(  RegOpenKeyEx( m_RootKey, path, 0, KEY_READ, &keyHandle ) == ERROR_SUCCESS )
  100.     {
  101.         if( RegQueryValueEx(  keyHandle, valueName, NULL, &valueType, NULL, &size1 ) == ERROR_SUCCESS )
  102.         {
  103.            if( valueType == REG_DWORD )
  104.            {
  105.                if( RegQueryValueEx(  keyHandle, valueName, NULL, &valueType, (LPBYTE)&tempValue, &size1 ) == ERROR_SUCCESS )
  106.                {
  107.                   default_value = tempValue;
  108.                };
  109.            }
  110.         }
  111.         RegCloseKey( keyHandle );
  112.     }
  113.     return default_value;
  114. }
  115. char * QVLCRegistry::ReadRegistryString( const char *path, const char *valueName, char *default_value )
  116. {
  117.     HKEY keyHandle;
  118.     char *tempValue = NULL;
  119.     DWORD size1;
  120.     DWORD valueType;
  121.     if( RegOpenKeyEx( m_RootKey, path, 0, KEY_READ, &keyHandle ) == ERROR_SUCCESS )
  122.     {
  123.         if( RegQueryValueEx(  keyHandle, valueName, NULL, &valueType, NULL, &size1 ) == ERROR_SUCCESS )
  124.         {
  125.            if( valueType == REG_SZ )
  126.            {
  127.                // free
  128.                tempValue = ( char * )malloc( size1+1 ); // +1 für NullByte`?
  129.                if( RegQueryValueEx(  keyHandle, valueName, NULL, &valueType, (LPBYTE)tempValue, &size1 ) == ERROR_SUCCESS )
  130.                {
  131.                   default_value = tempValue;
  132.                };
  133.            }
  134.         }
  135.         RegCloseKey( keyHandle );
  136.     }
  137.     if( tempValue == NULL )
  138.     {
  139.         // wenn tempValue nicht aus registry gelesen wurde dafür sorgen das ein neuer String mit der Kopie von DefaultValue
  140.         // geliefert wird - das macht das Handling des Rückgabewertes der Funktion einfacher - immer schön mit free freigeben!
  141.         default_value = strdup( default_value );
  142.     }
  143.     return default_value;
  144. }
  145. double QVLCRegistry::ReadRegistryDouble( const char *path, const char *valueName, double default_value )
  146. {
  147.     HKEY keyHandle;
  148.     double tempValue;
  149.     DWORD size1;
  150.     DWORD valueType;
  151.     if( RegOpenKeyEx( m_RootKey, path, 0, KEY_READ, &keyHandle ) == ERROR_SUCCESS )
  152.     {
  153.         if( RegQueryValueEx( keyHandle, valueName, NULL, &valueType,
  154.                              NULL, &size1 ) == ERROR_SUCCESS )
  155.         {
  156.            if( ( valueType == REG_BINARY ) && ( size1 == sizeof( double ) ) )
  157.            {
  158.                if( RegQueryValueEx(  keyHandle, valueName, NULL, &valueType,
  159.                            (LPBYTE)&tempValue, &size1 ) == ERROR_SUCCESS )
  160.                {
  161.                   default_value = tempValue;
  162.                };
  163.            }
  164.         }
  165.         RegCloseKey( keyHandle );
  166.     }
  167.     return default_value;
  168. }
  169. int QVLCRegistry::DeleteValue( const char *path, const char *valueName )
  170. {
  171.     HKEY keyHandle;
  172.     long result;
  173.     if( (result = RegOpenKeyEx(m_RootKey, path, 0, KEY_WRITE, &keyHandle)) == ERROR_SUCCESS)
  174.     {
  175.         result = RegDeleteValue(keyHandle, valueName);
  176.         RegCloseKey(keyHandle);
  177.     }
  178.     //ERROR_SUCCESS = ok everything else you have a problem*g*,
  179.     return result;
  180. }
  181. long QVLCRegistry::DeleteKey( const char *path, const char *keyName )
  182. {
  183.     HKEY keyHandle;
  184.     long result;
  185.     if( (result = RegOpenKeyEx(m_RootKey, path, 0, KEY_WRITE, &keyHandle)) == ERROR_SUCCESS)
  186.     {
  187.          // be warned the key "keyName" will not be deleted if there are subkeys below him, values
  188.         // I think are ok and will be recusively deleted, but not keys...
  189.         // for this case we have to do a little bit more work!
  190.         result = RegDeleteKey(keyHandle, keyName);
  191.         RegCloseKey(keyHandle);
  192.     }
  193.     //ERROR_SUCCESS = ok everything else you have a problem*g*,
  194.     return result;
  195. }
  196. #endif /* WIN32 */