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 >
Wrap
C/C++ Source or Header
|
2005-01-05
|
6KB
|
197 lines
#include "stdafx.h"
#include "CConfiguration.h"
CRegistry::CRegistry( HKEY hkParent, LPCTSTR lpszKey, BOOL bSave )
: m_bSave( bSave )
{
LONG lResult = RegCreateKeyEx( HKEY_CURRENT_USER, lpszKey, 0, _T(""), 0, bSave ? KEY_WRITE : KEY_READ, NULL, &m_hKey, 0 );
if( lResult != 0 )
{
m_hKey = 0;
}
}
CRegistry::~CRegistry()
{
if( m_hKey )
RegCloseKey(m_hKey);
}
BOOL CRegistry::RegExchange( LPCTSTR lpszName, CString* strValue )
{
if( !m_hKey )
return FALSE;
if( !m_bSave )
{
DWORD dwData = sizeof(m_bRegData), dwType;
if( RegQueryValueEx(m_hKey,lpszName,0,&dwType,m_bRegData,&dwData ) == 0 )
{
if( dwType == REG_SZ )
{
*strValue = (LPCTSTR) m_bRegData;
return TRUE;
}
}
return FALSE;
}
else
{
LPCTSTR lpszValue = *strValue;
return (RegSetValueEx(m_hKey,lpszName,0,REG_SZ,(LPBYTE)lpszValue, lpszValue ? (lstrlen(lpszValue)+1)*sizeof(TCHAR) : 0 ) == 0);
}
}
BOOL CRegistry::RegExchange( LPCTSTR lpszName, DWORD* pValue )
{
if( !m_hKey )
return FALSE;
if( !m_bSave )
{
DWORD dwData = sizeof(m_bRegData), dwType;
if( RegQueryValueEx(m_hKey,lpszName,0,&dwType,m_bRegData,&dwData ) == 0 )
{
if( dwType == REG_DWORD )
{
*pValue = *(LPDWORD) m_bRegData;
return TRUE;
}
}
return FALSE;
}
else
{
return (RegSetValueEx(m_hKey,lpszName,0,REG_DWORD,(LPBYTE)pValue, sizeof(DWORD) ) == 0);
}
}
BOOL CRegistry::RegExchange( LPCTSTR lpszName, CStringArray* pValue )
{
if( !m_hKey )
return FALSE;
if( m_bSave )
{
int nCount = pValue->GetSize();
CString SearchString;
for( int nIndex = 0; nIndex < nCount; nIndex++ )
{
SearchString.Format( lpszName, nIndex );
RegExchange( SearchString, &(pValue->GetAt(nIndex)) );
}
}
else
{
int nIndex = 0;
ASSERT( pValue->GetSize() == 0 );
while( true )
{
CString temp;
CString SearchString;
SearchString.Format( lpszName, nIndex++ );
if( RegExchange( SearchString, &temp ) )
{
pValue->SetSize(nIndex);
pValue->SetAt(nIndex-1, temp );
}
else
{
break;
}
}
}
return TRUE;
}
BOOL CRegistry::RegExchange( LPCTSTR lpszName, BOOL* pValue )
{
if( !m_hKey )
return FALSE;
if( !m_bSave )
{
DWORD dwData = sizeof(m_bRegData), dwType;
if( RegQueryValueEx(m_hKey,lpszName,0,&dwType,m_bRegData,&dwData ) == 0 )
{
if( dwType == REG_DWORD )
{
*pValue = (*(LPDWORD) m_bRegData) ? TRUE : FALSE;
return TRUE;
}
}
return FALSE;
}
else
{
DWORD dwValue = *pValue ? TRUE : FALSE;
return (RegSetValueEx(m_hKey,lpszName,0,REG_DWORD,(LPBYTE)&dwValue, sizeof(DWORD) ) == 0);
}
}
CConfiguration theConfiguration;
CConfiguration::CConfiguration()
: m_strFontFace( _T("Verdana") ),
m_strExportXmlFilename( _T("c:\\pserv.xml") ),
m_strExportHTMLFilename( _T("c:\\pserv.html") ),
m_strExportRegistryBackupFilename( _T("c:\\pserv.regback") ),
m_strExportPlaintextFilename( _T("c:\\pserv.txt") ),
m_bToolbarVisible( TRUE ),
m_dwWindowX( 0 ),
m_dwWindowY( 0 ),
m_dwWindowWidth( 800 ),
m_dwWindowHeight( 600 ),
m_bSearchCaseSensitive( FALSE ),
m_bSearchWholeWordsOnly( FALSE ),
m_bSearchHighlightAllResults( FALSE ),
m_bSearchUp( FALSE ),
m_dwShowCmd( SW_SHOW ),
m_dwFontSize( 90 )
{
}
void CConfiguration::DoConfigExchange(CRegistry& key)
{
key.RegExchange( _T("FontFace"), &m_strFontFace );
key.RegExchange( _T("FontSize"), &m_dwFontSize );
key.RegExchange( _T("ExportXmlFilename"), &m_strExportXmlFilename );
key.RegExchange( _T("ExportHTMLFilename"), &m_strExportHTMLFilename );
key.RegExchange( _T("ExportRegistryBackupFilename"), &m_strExportRegistryBackupFilename );
key.RegExchange( _T("ExportPlaintextFilename"), &m_strExportPlaintextFilename );
key.RegExchange( _T("ToolbarVisible"), &m_bToolbarVisible );
key.RegExchange( _T("SearchCaseSensitive"), &m_bSearchCaseSensitive );
key.RegExchange( _T("SearchWholeWordsOnly"), &m_bSearchWholeWordsOnly );
key.RegExchange( _T("SearchHighlightAllResults"), &m_bSearchHighlightAllResults );
key.RegExchange( _T("SearchUp"), &m_bSearchUp );
key.RegExchange( _T("WindowX"), &m_dwWindowX );
key.RegExchange( _T("WindowY"), &m_dwWindowY );
key.RegExchange( _T("WindowWidth"), &m_dwWindowWidth );
key.RegExchange( _T("WindowHeight"), &m_dwWindowHeight );
key.RegExchange( _T("SearchString%d"), &m_FindStrings );
key.RegExchange( _T("RemoteMachine%d"), &m_ComputerNames );
key.RegExchange( _T("ShowCmd"), &m_dwShowCmd );
DWORD dwOUT = DWORD(-30000);
if( (m_dwWindowX >= dwOUT) || (m_dwWindowY >= dwOUT) )
{
m_dwWindowY = m_dwWindowX = 0;
}
if( m_dwWindowHeight <= 30 )
{
m_dwWindowHeight = 600;
}
}
void CConfiguration::Load()
{
CRegistry key( HKEY_CURRENT_USER, REGISTRY_BASE, FALSE );
DoConfigExchange(key);
}
void CConfiguration::Save()
{
CRegistry key( HKEY_CURRENT_USER, REGISTRY_BASE, TRUE );
DoConfigExchange(key);
}