⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cconfig.cpp

📁 能够通过输入IP地址扫描端口
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	char szKey[REGKEY_MAX_KEY_VALUE+1];

	if(m_Registry)
	{
		m_Registry->Attach(HKEY_LOCAL_MACHINE);

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

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

				iter = m_Config->Next(iter);
			}

		m_Registry->Detach();
	}
}

/*
	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_Registry)
	{
		m_Registry->Attach(HKEY_LOCAL_MACHINE);

		// scorre la lista aggiornando la sezione
		if((iter = m_Config->First())!=(ITERATOR)NULL)
			while(iter!=(ITERATOR)NULL)
			{
				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_Registry->Open(HKEY_LOCAL_MACHINE,szKey))!=ERROR_SUCCESS)
							lRet = m_Registry->Create(HKEY_LOCAL_MACHINE,szKey);
						if(lRet==ERROR_SUCCESS)
						{
							if(c->GetType()==LPSTR_TYPE)
								m_Registry->SetValue(c->GetValue((LPCSTR)NULL),c->GetName());
							else if(c->GetType()==DWORD_TYPE)
								m_Registry->SetValue(c->GetValue((DWORD)0L),c->GetName());
							
							m_Registry->Close();
						}
					}

				iter = m_Config->Next(iter);
			}

		m_Registry->Detach();
	}
}

/*
	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_Registry)
	{
		m_Registry->Attach(HKEY_LOCAL_MACHINE);

		// elimina (dalla lista e dal registro) le chiavi relative alla sezione
		if((iter = m_Config->First())!=(ITERATOR)NULL)
			while(iter!=(ITERATOR)NULL)
			{
				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_Registry->Open(HKEY_LOCAL_MACHINE,szKey)==ERROR_SUCCESS)
							{
								m_Registry->DeleteValue(c->GetName());
								m_Registry->Close();
							}
						}

						// elimina la chiave dalla lista
						//m_Config->Delete(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());
					}

				iter = m_Config->Next(iter);
			}

		m_Registry->Detach();
	
		SetModified(TRUE);
	}
}

/*
	Export()
*/
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_Config->First())!=(ITERATOR)NULL)
			while(iter!=(ITERATOR)NULL)
			{
				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_Config->Next(iter);
			}

		fclose(fp);
		
		bSaved = TRUE;
	}

	return(bSaved);
}

/*
	Import()
*/
BOOL	CConfig::Import(LPCSTR lpcszRootKey,LPCSTR lpcszFileName)
{
	BOOL bLoaded = FALSE;
	FILE* fp;

	if((fp = fopen(lpcszFileName,"r"))!=(FILE*)NULL)
	{
		char* p;
		char szBuffer[REGKEY_MAX_SECTION_NAME+REGKEY_MAX_KEY_NAME+REGKEY_MAX_KEY_VALUE+16];
		char szSection[REGKEY_MAX_SECTION_NAME+1];
		char szName[REGKEY_MAX_KEY_NAME+1];
		char szValue[REGKEY_MAX_KEY_VALUE+1];
		char szType[5];

		// legge la prima linea controllando se si tratta di un file di configurazione
		fgets(szBuffer,sizeof(szBuffer)-1,fp);
		if((p = strchr(szBuffer,'\r'))==NULL)
			p = strchr(szBuffer,'\n');
		if(p)
			*p = '\0';
		if(strcmp(szBuffer,"[Configuration File]")!=0)
		{
			fclose(fp);
			return(bLoaded);
		}

		// legge il file di configurazione per linee
		while(fgets(szBuffer,sizeof(szBuffer)-1,fp))
		{
			if((p = strchr(szBuffer,'\r'))==NULL)
				p = strchr(szBuffer,'\n');
			if(p)
				*p = '\0';
			
			// estrae i valori dalla linea (sezione, chiave, valore, tipo)
			memset(szSection,'\0',sizeof(szSection));
			memset(szName,'\0',sizeof(szName));
			memset(szValue,'\0',sizeof(szValue));
			memset(szType,'\0',sizeof(szType));

			p = strrchr(szBuffer,';');
			if(p)
			{
				strcpyn(szType,p+1,sizeof(szType));
				*p = '\0';
			}
			p = strrchr(szBuffer,';');
			if(p)
			{
				strcpyn(szValue,p+1,sizeof(szValue));
				*p = '\0';
			}
			p = strrchr(szBuffer,';');
			if(p)
			{
				strcpyn(szName,p+1,sizeof(szName));
				*p = '\0';
			}
			p = szBuffer;
			if(p)
				strcpyn(szSection,p,sizeof(szSection));

			if(szSection[0]!='\0' && szName[0]!='\0' && szValue[0]!='\0' && szType[0]!='\0')
			{
				if(strcmp(szType,"SZ")==0)
				{
					if(strcmp(UpdateString(szSection,szName,szValue),"")==0)
					{
						CONFIG* c = new CONFIG();
						if(c)
						{
							c->Init(szSection,szName,szValue);
							m_Config->Add(c);
						}
					}
				}
				else if(strcmp(szType,"DW")==0)
				{
					if(UpdateNumber(szSection,szName,atol(szValue))==(DWORD)-1)
					{
						CONFIG* c = new CONFIG();
						if(c)
						{
							c->Init(szSection,szName,atol(szValue));
							m_Config->Add(c);
						}
					}
				}
			}
		}

		fclose(fp);
		
		Save(lpcszRootKey);
		
		bLoaded = TRUE;
	}

	return(bLoaded);
}

/*
	RegistryCreateValue()

	Crea la coppia nome/valore dentro la chiave specificata, es.:
	key   = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
	name  = "WallPaper"
	value = "C:\\WallPaper\\WallPaper.exe"
*/
BOOL CConfig::RegistryCreateValue(LPCSTR lpcszKey,LPCSTR lpcszName,LPCSTR lpcszValue)
{
	BOOL flag = FALSE;

	m_Registry->Attach(HKEY_LOCAL_MACHINE);

	if(m_Registry->Open(HKEY_LOCAL_MACHINE,lpcszKey)==ERROR_SUCCESS)
	{
		char name[_MAX_PATH+1];
		DWORD namesize = sizeof(name);

		if(m_Registry->QueryValue(name,lpcszName,&namesize)!=ERROR_SUCCESS)
			flag = m_Registry->SetValue(lpcszValue,lpcszName)==ERROR_SUCCESS;
		
		m_Registry->Close();
	}
	
	m_Registry->Detach();

	return(flag);
}

/*
	RegistryCreateValue()

	Crea la coppia nome/valore dentro la chiave specificata, es.:
	key   = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
	name  = "WallPaper"
	value = "C:\\WallPaper\\WallPaper.exe"
*/
BOOL CConfig::RegistryCreateValue(LPCSTR lpcszKey,LPCSTR lpcszName,DWORD dwValue)
{
	BOOL flag = FALSE;

	m_Registry->Attach(HKEY_LOCAL_MACHINE);

	if(m_Registry->Open(HKEY_LOCAL_MACHINE,lpcszKey)==ERROR_SUCCESS)
	{
		if(m_Registry->QueryValue(dwValue,lpcszName)!=ERROR_SUCCESS)
			flag = m_Registry->SetValue(dwValue,lpcszName)==ERROR_SUCCESS;
		
		m_Registry->Close();
	}
	
	m_Registry->Detach();

	return(flag);
}

/*
	RegistryDeleteValue()

	Elimina la coppia nome/valore dentro la chiave specificata, es.:
	key   = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
	name  = "WallPaper"
	value = "C:\\WallPaper\\WallPaper.exe"
*/
BOOL CConfig::RegistryDeleteValue(LPCSTR lpcszKey,LPCSTR lpcszName)
{
	BOOL flag = FALSE;

	m_Registry->Attach(HKEY_LOCAL_MACHINE);

	if(m_Registry->Open(HKEY_LOCAL_MACHINE,lpcszKey)==ERROR_SUCCESS)
	{
		char name[_MAX_PATH+1];
		DWORD namesize = sizeof(name);

		if(m_Registry->QueryValue(name,lpcszName,&namesize)==ERROR_SUCCESS)
			flag = m_Registry->DeleteValue(lpcszName)==ERROR_SUCCESS;

		m_Registry->Close();
	}
	
	m_Registry->Detach();

	return(flag);
}

/*
	Reset()
*/
void CConfig::CONFIG::Reset(void)
{
	memset(m_szSection,'\0',sizeof(m_szSection));
	memset(m_szName,'\0',sizeof(m_szName));
	memset(&m_Value,'\0',sizeof(VALUE));
	m_Type = NULL_TYPE;
}

/*
	Init()
*/
void CConfig::CONFIG::Init(LPCSTR lpcszSectionName/*=NULL*/,LPCSTR lpcszKeyName/*=NULL*/,LPCSTR lpcszKeyValue/*=NULL*/)
{
	SetSection(lpcszSectionName);
	SetName(lpcszKeyName);
	SetValue(lpcszKeyValue);
}

/*
	Init()
*/
void CConfig::CONFIG::Init(LPCSTR lpcszSectionName/*=NULL*/,LPCSTR lpcszKeyName/*=NULL*/,DWORD dwKeyValue/*=(DWORD)-1L*/)
{
	SetSection(lpcszSectionName);
	SetName(lpcszKeyName);
	SetValue(dwKeyValue);
}

/*
	SetSection()
*/
void CConfig::CONFIG::SetSection(LPCSTR lpcszSectionName)
{
	if(lpcszSectionName)
		strcpyn(m_szSection,lpcszSectionName,sizeof(m_szSection));
}

/*
	SetName()
*/
void CConfig::CONFIG::SetName(LPCSTR lpcszKeyName)
{
	if(lpcszKeyName)
		strcpyn(m_szName,lpcszKeyName,sizeof(m_szName));
}

/*
	SetValue()
*/
void CConfig::CONFIG::SetValue(LPCSTR lpcszKeyValue)
{	
	if(lpcszKeyValue)
	{
		memset(m_Value.szValue,'\0',REGKEY_MAX_KEY_VALUE+1);
		strcpyn(m_Value.szValue,lpcszKeyValue,REGKEY_MAX_KEY_VALUE+1);
		m_Type = LPSTR_TYPE;
	}
}

/*
	SetValue()
*/
void CConfig::CONFIG::SetValue(DWORD dwKeyValue)
{
	if(dwKeyValue!=(DWORD)-1L)
	{
		m_Value.dwValue = dwKeyValue;
		m_Type = DWORD_TYPE;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -