📄 cconfig.cpp
字号:
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 + -