예제 #1
0
/*
	SaveSection()

	Salva nel registro i valori presenti nella lista relativi alla sezione.

	LPCSTR	lpcszRootKey		nome della chiave base
	LPCSTR	lpcszSectionKey	nome della sezione
*/
void CConfig::SaveSection(LPCSTR lpcszRootKey,LPCSTR lpcszSectionKey)
{
	CONFIG* c;
	ITERATOR iter;
	LONG lRet;
	char szKey[REGKEY_MAX_KEY_VALUE+1];

	if(m_pRegistry)
	{
		m_pRegistry->Attach(HKEY_CURRENT_USER);

		// scorre la lista aggiornando la sezione
		if((iter = m_plistConfig->First())!=(ITERATOR)NULL)
		{
			do
			{
				c = (CONFIG*)iter->data;
			
				if(c)
					// non inserisce nel registro le chiavi eliminate
					if(c->GetType()!=NULL_TYPE && strcmp(c->GetSection(),lpcszSectionKey)==0)
					{
						// salva la chiave nel registro
						_snprintf(szKey,sizeof(szKey)-1,DEFAULT_REG_KEY"\\%s\\%s",lpcszRootKey,c->GetSection());

						if((lRet = m_pRegistry->Open(HKEY_CURRENT_USER,szKey))!=ERROR_SUCCESS)
							lRet = m_pRegistry->Create(HKEY_CURRENT_USER,szKey);
						if(lRet==ERROR_SUCCESS)
						{
							if(c->GetType()==LPSTR_TYPE)
								m_pRegistry->SetValue(c->GetValue((LPCSTR)NULL),c->GetName());
							else if(c->GetType()==DWORD_TYPE)
								m_pRegistry->SetValue(c->GetValue((DWORD)0L),c->GetName());
							
							m_pRegistry->Close();
						}
					}

				iter = m_plistConfig->Next(iter);
			
			} while(iter!=(ITERATOR)NULL);
		}
		
		m_pRegistry->Detach();
	}
}
예제 #2
0
/*
	Export()

	Esporta la configurazione corrente nel file specificato.
*/
BOOL	CConfig::Export(LPCSTR /*lpcszRootKey*/,LPCSTR lpcszFileName)
{
	BOOL bSaved = FALSE;
	FILE* fp;

	if((fp = fopen(lpcszFileName,"w"))!=(FILE*)NULL)
	{
		CONFIG* c;
		ITERATOR iter;

		fprintf(fp,"[%s]\n","Configuration File");

		// salva nel file le chiavi presenti nella lista
		if((iter = m_plistConfig->First())!=(ITERATOR)NULL)
		{
			do
			{
				c = (CONFIG*)iter->data;
				
				if(c)
					// non inserisce le chiavi eliminate
					if(c->GetType()!=NULL_TYPE)
					{
						if(c->GetType()==LPSTR_TYPE)
							fprintf(fp,"%s;%s;%s;%s\n",c->GetSection(),c->GetName(),c->GetValue((LPCSTR)NULL),"SZ");
						else if(c->GetType()==DWORD_TYPE)
							fprintf(fp,"%s;%s;%ld;%s\n",c->GetSection(),c->GetName(),c->GetValue((DWORD)0L),"DW");
					}

				iter = m_plistConfig->Next(iter);
			
			} while(iter!=(ITERATOR)NULL);
		}
		
		fclose(fp);
		
		bSaved = TRUE;
	}

	return(bSaved);
}
예제 #3
0
/*
	DeleteSection()

	Elimina dal registro (e dalla lista) i valori presenti nella lista relativi alla sezione.

	LPCSTR	lpcszRootKey		nome della chiave base
	LPCSTR	lpcszSectionKey	nome della sezione
	BOOL		bDeleteFromRegistry	flag per eliminazione delle chiavi dal registro
*/
void CConfig::DeleteSection(LPCSTR lpcszRootKey,LPCSTR lpcszSectionKey,BOOL bDeleteFromRegistry/*=FALSE*/)
{
	CONFIG* c;
	ITERATOR iter;
	char szKey[REGKEY_MAX_KEY_VALUE+1];

	if(m_pRegistry)
	{
		m_pRegistry->Attach(HKEY_CURRENT_USER);

		// elimina (dalla lista e dal registro) le chiavi relative alla sezione
		if((iter = m_plistConfig->First())!=(ITERATOR)NULL)
		{
			do
			{
				c = (CONFIG*)iter->data;
				
				if(c)
					// chiave da eliminare
					if(c->GetType()!=NULL_TYPE && strcmp(c->GetSection(),lpcszSectionKey)==0)
					{
						// elimina la chiave dal registro
						if(bDeleteFromRegistry)
						{
							_snprintf(szKey,sizeof(szKey)-1,DEFAULT_REG_KEY"\\%s\\%s",lpcszRootKey,c->GetSection());
							if(m_pRegistry->Open(HKEY_CURRENT_USER,szKey)==ERROR_SUCCESS)
							{
								m_pRegistry->DeleteValue(c->GetName());
								m_pRegistry->Close();
							}
						}

						// elimina la chiave dalla lista
						//m_plistConfig->Remove(iter);
						
						// eliminando l'elemento della lista (iter) e non la chiave (marcandola come cancellata) i salvataggi successivi
						// non possono eliminare dal registro le serie di chiavi come Key[0]...Key[n]
						//Delete(c->GetSection(),c->GetName());
						
						c->SetType(NULL_TYPE);
						SetModified(TRUE);
					}

				iter = m_plistConfig->Next(iter);
			
			} while(iter!=(ITERATOR)NULL);
		}
		
		m_pRegistry->Detach();
	
		SetModified(TRUE);
	}
}
예제 #4
0
/*
	String()

	Restituisce o aggiorna il valore (stringa) associato alla sezione/chiave a seconda del parametro
	associato al valore (NULL/-1 recupera, in caso contrario aggiorna).

	LPCSTR	lpcszSectionName	nome sezione
	LPCSTR	lpcszKeyName		nome chiave
	LPCSTR	lpcszKeyValue		valore chiave (stringa)
*/
LPCSTR CConfig::String(LPCSTR lpcszSectionName,LPCSTR lpcszKeyName,LPCSTR lpcszKeyValue/*=NULL*/)
{
	static char* p;
	CONFIG* c;
	ITERATOR iter;

	p = "";

	// scorre la lista cercando l'entrata relativa alla coppia sezione/chiave
	if((iter = m_plistConfig->First())!=(ITERATOR)NULL)
	{
		do
		{
			c = (CONFIG*)iter->data;
			if(c)
				if(strcmp(lpcszSectionName,c->GetSection())==0)
				{
					if(strcmp(lpcszKeyName,c->GetName())==0)
					{
						// salta i valori marcati per l'eliminazione (NULL_TYPE)
						if(c->GetType()!=NULL_TYPE)
						{
							if(lpcszKeyValue!=NULL)
							{
								// aggiorna il valore
								c->SetValue(lpcszKeyValue);
								p = (char*)c->GetValue(p);
								break;
							}
							else
							{
								// ricava il valore
								p = (char*)c->GetValue(p);
								if(!*p)
									p = "";
								break;
							}
						}
					}
				}

			iter = m_plistConfig->Next(iter);
		
		} while(iter!=(ITERATOR)NULL);
	}
	
	return(p);
}
예제 #5
0
/*
	Number()

	Restituisce o aggiorna il valore (numerico) associato alla sezione/nome a seconda del parametro
	associato al valore (NULL/-1 recupera, in caso contrario aggiorna).

	LPCSTR	lpcszSectionName	nome sezione
	LPCSTR	lpcszKeyName		nome chiave
	LPCSTR	lpcszKeyValue		valore chiave (numero)
*/
DWORD CConfig::Number(LPCSTR lpcszSectionName,LPCSTR lpcszKeyName,DWORD dwKeyValue/*=(DWORD)-1L*/)
{
	DWORD l = (DWORD)-1L;
	CONFIG* c;
	ITERATOR iter;

	// scorre la lista cercando l'entrata relativa alla coppia sezione/chiave
	if((iter = m_plistConfig->First())!=(ITERATOR)NULL)
	{
		do
		{
			c = (CONFIG*)iter->data;
			
			if(c)
				if(strcmp(lpcszSectionName,c->GetSection())==0)
				{
					if(strcmp(lpcszKeyName,c->GetName())==0)
					{
						// salta i valori marcati per l'eliminazione (NULL_TYPE)
						if(c->GetType()!=NULL_TYPE)
						{
							if(dwKeyValue!=(DWORD)-1L)
							{
								// aggiorna il valore
								c->SetValue(dwKeyValue);
								l = c->GetValue(l);
								break;
							}
							else
							{
								// ricava il valore
								l = c->GetValue(l);
								break;
							}
						}
					}
				}

			iter = m_plistConfig->Next(iter);
		
		} while(iter!=(ITERATOR)NULL);
	}
	
	return(l);
}
예제 #6
0
/*
	Save()

	Salva nel registro i valori presenti nella lista.

	LPCSTR	lpcszRootKey	nome della chiave base
*/
void CConfig::Save(LPCSTR lpcszRootKey)
{
	CONFIG* c;
	ITERATOR iter;
	LONG lRet;
	char szKey[REGKEY_MAX_KEY_VALUE+1];
	memset(szKey,'\0',sizeof(szKey));

	if(m_pRegistry)
	{
		m_pRegistry->Attach(HKEY_CURRENT_USER);

		// elimina (dalla lista e dal registro) le chiavi marcate per la cancellazione
		if((iter = m_plistConfig->First())!=(ITERATOR)NULL)
		{
			do
			{
				c = (CONFIG*)iter->data;
				
				if(c)
					// chiave da eliminare
					if(c->GetType()==NULL_TYPE)
					{
						// elimina la chiave dal registro
						_snprintf(szKey,sizeof(szKey)-1,DEFAULT_REG_KEY"\\%s\\%s",lpcszRootKey,c->GetSection());
						if(m_pRegistry->Open(HKEY_CURRENT_USER,szKey)==ERROR_SUCCESS)
						{
							m_pRegistry->DeleteValue(c->GetName());
							m_pRegistry->Close();
						}

						// elimina la chiave dalla lista
						m_plistConfig->Remove(iter);
					}

				iter = m_plistConfig->Next(iter);
			
			} while(iter!=(ITERATOR)NULL);
		}
		
		// salva nel registro le chiavi presenti nella lista
		if((iter = m_plistConfig->First())!=(ITERATOR)NULL)
		{
			do
			{
				c = (CONFIG*)iter->data;
				if(c)
					// non inserisce nel registro le chiavi eliminate
					if(c->GetType()!=NULL_TYPE)
					{
						_snprintf(szKey,sizeof(szKey)-1,DEFAULT_REG_KEY"\\%s\\%s",lpcszRootKey,c->GetSection());

						if((lRet = m_pRegistry->Open(HKEY_CURRENT_USER,szKey))!=ERROR_SUCCESS)
							lRet = m_pRegistry->Create(HKEY_CURRENT_USER,szKey);
						if(lRet==ERROR_SUCCESS)
						{
							if(c->GetType()==LPSTR_TYPE)
								m_pRegistry->SetValue(c->GetValue((LPCSTR)NULL),c->GetName());
							else if(c->GetType()==DWORD_TYPE)
								m_pRegistry->SetValue(c->GetValue((DWORD)0L),c->GetName());
							
							m_pRegistry->Close();
						}
					}

				iter = m_plistConfig->Next(iter);
			
			} while(iter!=(ITERATOR)NULL);
		}
		
		m_pRegistry->Detach();
	
		SetModified(FALSE);
	}
}