home *** CD-ROM | disk | FTP | other *** search
/ Softwarová Záchrana 3 / Softwarova-zachrana-3.bin / pserv.cpl / pserv-2.4.exe / source / CConfiguration.cpp < prev    next >
C/C++ Source or Header  |  2005-01-05  |  6KB  |  197 lines

  1. #include "stdafx.h"
  2. #include "CConfiguration.h"
  3.  
  4. CRegistry::CRegistry( HKEY hkParent, LPCTSTR lpszKey, BOOL bSave )
  5.     :   m_bSave( bSave )
  6. {
  7.     LONG lResult = RegCreateKeyEx( HKEY_CURRENT_USER, lpszKey, 0, _T(""), 0, bSave ? KEY_WRITE : KEY_READ, NULL, &m_hKey, 0 );
  8.     if( lResult != 0 )
  9.     {
  10.         m_hKey = 0;
  11.     }
  12. }
  13.  
  14. CRegistry::~CRegistry()
  15. {
  16.     if( m_hKey )
  17.         RegCloseKey(m_hKey);
  18. }
  19.         
  20. BOOL CRegistry::RegExchange( LPCTSTR lpszName, CString* strValue )
  21. {
  22.     if( !m_hKey )
  23.         return FALSE;
  24.  
  25.     if( !m_bSave )
  26.     {
  27.         DWORD dwData = sizeof(m_bRegData), dwType;
  28.         if( RegQueryValueEx(m_hKey,lpszName,0,&dwType,m_bRegData,&dwData ) == 0 )
  29.         {
  30.             if( dwType == REG_SZ )
  31.             {
  32.                 *strValue = (LPCTSTR) m_bRegData;
  33.                 return TRUE;
  34.             }
  35.         }
  36.         return FALSE;
  37.     }
  38.     else
  39.     {
  40.         LPCTSTR lpszValue = *strValue;
  41.         return (RegSetValueEx(m_hKey,lpszName,0,REG_SZ,(LPBYTE)lpszValue, lpszValue ? (lstrlen(lpszValue)+1)*sizeof(TCHAR) : 0 ) == 0);
  42.     }
  43. }
  44.  
  45. BOOL CRegistry::RegExchange( LPCTSTR lpszName, DWORD* pValue )
  46. {
  47.     if( !m_hKey )
  48.         return FALSE;
  49.  
  50.     if( !m_bSave )
  51.     {
  52.         DWORD dwData = sizeof(m_bRegData), dwType;
  53.         if( RegQueryValueEx(m_hKey,lpszName,0,&dwType,m_bRegData,&dwData ) == 0 )
  54.         {
  55.             if( dwType == REG_DWORD )
  56.             {
  57.                 *pValue = *(LPDWORD) m_bRegData;
  58.                 return TRUE;
  59.             }
  60.         }
  61.         return FALSE;
  62.     }
  63.     else
  64.     {
  65.         return (RegSetValueEx(m_hKey,lpszName,0,REG_DWORD,(LPBYTE)pValue, sizeof(DWORD) ) == 0);
  66.     }
  67. }
  68.  
  69. BOOL CRegistry::RegExchange( LPCTSTR lpszName, CStringArray* pValue )
  70. {
  71.     if( !m_hKey )
  72.         return FALSE;
  73.  
  74.     if( m_bSave )
  75.     {
  76.         int nCount = pValue->GetSize();
  77.         CString SearchString;
  78.         for( int nIndex = 0; nIndex < nCount; nIndex++ )
  79.         {
  80.             SearchString.Format( lpszName, nIndex );
  81.             RegExchange( SearchString, &(pValue->GetAt(nIndex)) );
  82.         }        
  83.     }   
  84.     else
  85.     {
  86.         int nIndex = 0;
  87.         ASSERT( pValue->GetSize() == 0 );
  88.         while( true )
  89.         {
  90.             CString temp;
  91.             CString SearchString;
  92.             SearchString.Format( lpszName, nIndex++ );
  93.             if( RegExchange( SearchString, &temp ) )
  94.             {
  95.                 pValue->SetSize(nIndex);
  96.                 pValue->SetAt(nIndex-1, temp );
  97.             }
  98.             else
  99.             {
  100.                 break;
  101.             }
  102.         }
  103.     }
  104.     return TRUE;
  105. }
  106.  
  107. BOOL CRegistry::RegExchange( LPCTSTR lpszName, BOOL* pValue )
  108. {
  109.     if( !m_hKey )
  110.         return FALSE;
  111.  
  112.     if( !m_bSave )
  113.     {
  114.         DWORD dwData = sizeof(m_bRegData), dwType;
  115.         if( RegQueryValueEx(m_hKey,lpszName,0,&dwType,m_bRegData,&dwData ) == 0 )
  116.         {
  117.             if( dwType == REG_DWORD )
  118.             {
  119.                 *pValue = (*(LPDWORD) m_bRegData) ? TRUE : FALSE;
  120.                 return TRUE;
  121.             }
  122.         }
  123.         return FALSE;
  124.     }
  125.     else
  126.     {
  127.         DWORD dwValue = *pValue ? TRUE : FALSE;
  128.         return (RegSetValueEx(m_hKey,lpszName,0,REG_DWORD,(LPBYTE)&dwValue, sizeof(DWORD) ) == 0);
  129.     }
  130. }
  131.  
  132. CConfiguration theConfiguration;
  133.  
  134. CConfiguration::CConfiguration()
  135.     :   m_strFontFace( _T("Verdana") ),
  136.         m_strExportXmlFilename( _T("c:\\pserv.xml") ),
  137.         m_strExportHTMLFilename( _T("c:\\pserv.html") ),
  138.         m_strExportRegistryBackupFilename( _T("c:\\pserv.regback") ),
  139.         m_strExportPlaintextFilename( _T("c:\\pserv.txt") ),
  140.         m_bToolbarVisible( TRUE ),
  141.         m_dwWindowX( 0 ),
  142.         m_dwWindowY( 0 ),
  143.         m_dwWindowWidth( 800 ),
  144.         m_dwWindowHeight( 600 ),
  145.         m_bSearchCaseSensitive( FALSE ),
  146.         m_bSearchWholeWordsOnly( FALSE ),
  147.         m_bSearchHighlightAllResults( FALSE ),
  148.         m_bSearchUp( FALSE ), 
  149.         m_dwShowCmd( SW_SHOW ),
  150.         m_dwFontSize( 90 )
  151. {
  152. }
  153.  
  154. void CConfiguration::DoConfigExchange(CRegistry& key)
  155. {
  156.     key.RegExchange( _T("FontFace"), &m_strFontFace );
  157.     key.RegExchange( _T("FontSize"), &m_dwFontSize );
  158.     key.RegExchange( _T("ExportXmlFilename"), &m_strExportXmlFilename );
  159.     key.RegExchange( _T("ExportHTMLFilename"), &m_strExportHTMLFilename );
  160.     key.RegExchange( _T("ExportRegistryBackupFilename"), &m_strExportRegistryBackupFilename );
  161.     key.RegExchange( _T("ExportPlaintextFilename"), &m_strExportPlaintextFilename );
  162.     key.RegExchange( _T("ToolbarVisible"), &m_bToolbarVisible );
  163.     key.RegExchange( _T("SearchCaseSensitive"), &m_bSearchCaseSensitive );
  164.     key.RegExchange( _T("SearchWholeWordsOnly"), &m_bSearchWholeWordsOnly );
  165.     key.RegExchange( _T("SearchHighlightAllResults"), &m_bSearchHighlightAllResults );
  166.     key.RegExchange( _T("SearchUp"), &m_bSearchUp );
  167.     key.RegExchange( _T("WindowX"), &m_dwWindowX );
  168.     key.RegExchange( _T("WindowY"), &m_dwWindowY );
  169.     key.RegExchange( _T("WindowWidth"), &m_dwWindowWidth );
  170.     key.RegExchange( _T("WindowHeight"), &m_dwWindowHeight );
  171.     key.RegExchange( _T("SearchString%d"), &m_FindStrings );
  172.     key.RegExchange( _T("RemoteMachine%d"), &m_ComputerNames );
  173.     key.RegExchange( _T("ShowCmd"), &m_dwShowCmd );
  174.  
  175.     DWORD dwOUT = DWORD(-30000);
  176.     if( (m_dwWindowX >= dwOUT) || (m_dwWindowY >= dwOUT) )
  177.     {
  178.         m_dwWindowY  = m_dwWindowX = 0;
  179.     }
  180.     if( m_dwWindowHeight <= 30 )
  181.     {
  182.         m_dwWindowHeight = 600;
  183.     }
  184. }
  185.  
  186. void CConfiguration::Load()
  187. {
  188.     CRegistry key( HKEY_CURRENT_USER, REGISTRY_BASE, FALSE );
  189.     DoConfigExchange(key);
  190. }
  191.  
  192. void CConfiguration::Save()
  193. {
  194.     CRegistry key( HKEY_CURRENT_USER, REGISTRY_BASE, TRUE );
  195.     DoConfigExchange(key);
  196. }
  197.