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

📄 organizeinifile.cpp

📁 mytoolpad 源码
💻 CPP
字号:
#include "stdafx.h"
#include "OrganizeInifile.h"


/**********   本类的使用方法   *************
********************************************
INI 文件结构:
[保存信息]
总项数=1
第1项=yesterday once more;世界名曲;作者未知

1.   COrganizeInifile org;
	org.SetParameter("c:\\windows\\win.ini","保存信息","第%d项");
2.	org.DeleteNItem(5);

3.   此类同时可以操作登录表
********************************************
***********   使用方法结束   **************/



COrganizeInifile::COrganizeInifile()
{
	m_beenset=FALSE;
	m_totalitem=0;
}

void COrganizeInifile::SetParameter(char * inifile,char *yield,char *format)
{
	m_beenset=TRUE;
	strcpy(IniFileName,inifile);
	strcpy(YieldName,yield);
	strcpy(SectionFormat,format);
	m_totalitem=GetPrivateProfileInt(YieldName,"总项数",0,IniFileName);
}

//删除第N项
void COrganizeInifile::DeleteNItem(int n)
{
	if(!m_beenset || n>m_totalitem || m_totalitem<=0)
		return;

	for(int i=n;i<m_totalitem;i++)
		CopyNItemAsMItem(i+1,i);
	m_totalitem--;
	char buffer[100];
	wsprintf(buffer,"%d",m_totalitem);
	WritePrivateProfileString(YieldName,"总项数",buffer,IniFileName);
}

//将第N项移到第一项
void COrganizeInifile::NItemToHead(int n)
{
	if(!m_beenset || n>m_totalitem || m_totalitem<=0)
		return;
	MoveNItemToMPos(n,1);
}

//将第N项移到最后一项
void COrganizeInifile::NItemToTail(int n)
{
	if(!m_beenset || n>m_totalitem || m_totalitem<=0)
		return;
	MoveNItemToMPos(n,m_totalitem);
}

//复制第N项到第M项
void COrganizeInifile::CopyNItemAsMItem(int n,int m)
{
	if(!m_beenset || n>m_totalitem || m_totalitem<=0)
		return;

	char buffer[255];
	char section[100];
	wsprintf(section,SectionFormat,n);
	GetPrivateProfileString(YieldName,section,"",buffer,255,IniFileName);

	wsprintf(section,SectionFormat,m);
	WritePrivateProfileString(YieldName,section,buffer,IniFileName);
}

//移动第N项到绝对位置M
void COrganizeInifile::MoveNItemToMPos(int n,int m)
{
	if(!m_beenset || n>m_totalitem || m_totalitem<=0)
		return;

	char buffer[255];
	char section[100];
	wsprintf(section,SectionFormat,n);
	GetPrivateProfileString(YieldName,section,"",buffer,255,IniFileName);
	DeleteNItem(n);
	InsertItemToNPos(buffer,m);
}

//将缓冲区内容插入到第N个位置
void COrganizeInifile::InsertItemToNPos(char *buffer,int n)
{
	if(!m_beenset)
		return;

	char section[100];
	m_totalitem++;
	wsprintf(section,"%d",m_totalitem);
	WritePrivateProfileString(YieldName,"总项数",section,IniFileName);

	for(int i=m_totalitem;i>n;i--)
		CopyNItemAsMItem(i-1,i);

	wsprintf(section,SectionFormat,n);
	WritePrivateProfileString(YieldName,section,buffer,IniFileName);
}

//第N项与第M项互换位置
void COrganizeInifile::ChangeNMPos(int n,int m)
{
	if(!m_beenset || n>m_totalitem || m_totalitem<=0)
		return;

	char buffer[255];
	char section[100];
	wsprintf(section,SectionFormat,n);
	GetPrivateProfileString(YieldName,section,"",buffer,255,IniFileName);
	CopyNItemAsMItem(m,n);

	wsprintf(section,SectionFormat,m);
	WritePrivateProfileString(YieldName,section,buffer,IniFileName);
}



//获取项目数据的第N个子字符串
char * COrganizeInifile::GetNItemMData(char *buffer,int n)
{
	return GetNSubString(_T(buffer),n);
}

char *COrganizeInifile::GetNSubString(CString config,int n)
{
	int  number=0;
	CString make;
	char buffer[200];
	memset(buffer,0,200);

	make.Format("%c%s%c",';',config,';');
	char *start=make.GetBuffer(make.GetLength());
	int  len=strlen(start);
	for(int i=0;i<len;i++)
	{
		if(start[i]==';')
		{
			number++;
			if(number==n)
			{
				strcpy(buffer,&start[i+1]);
				char *end=strchr(buffer,',');
				strcpy(end,"");
				break;
			}
		}
	}
	return &buffer[0];
}


int  COrganizeInifile::GetNItemMAsInt(char *data,int m)
{
	char buffer[200];
	strcpy(buffer,GetNItemMData(data,m));
	return (atoi(buffer));
}

int  COrganizeInifile::GetNItemMAsInt(int n,int m)
{
	char buffer[200];
	char section[100];
	wsprintf(section,SectionFormat,n);
	GetPrivateProfileString(YieldName,section,"",buffer,200,IniFileName);
	return GetNItemMAsInt(buffer,m);
}


//创建登录库字符串键值(主键,子键,键值名,键值)
BOOL COrganizeInifile::CreateDwordKey(HKEY parent,char *child,char *keyname,DWORD value)
{
	HKEY handle=NULL,hinter=NULL;
     unsigned long create=0;
	DWORD keyvalue=value;
     LONG ret=RegCreateKeyEx(parent,child,0,"",REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hinter,&create);
	if(ret!=ERROR_SUCCESS)
		return FALSE;
	ret=RegSetValueEx(hinter,keyname,0,REG_DWORD,(BYTE *)&keyvalue,sizeof(DWORD));
	RegCloseKey(hinter);
	return (ret==ERROR_SUCCESS);
}

BOOL COrganizeInifile::CreateBinaryKey(HKEY parent,char *child,char *keyname,long value)
{
	HKEY handle=NULL,hinter=NULL;
     unsigned long create=0,keyvalue=(unsigned long)value;
     LONG ret=RegCreateKeyEx(parent,child,0,"",REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hinter,&create);
	if(ret!=ERROR_SUCCESS)
		return FALSE;
	ret=RegSetValueEx(hinter,keyname,0,REG_BINARY,(BYTE *)&keyvalue,sizeof(DWORD));
	RegCloseKey(hinter);
	return (ret==ERROR_SUCCESS);
}

BOOL COrganizeInifile::CreateStringKey(HKEY parent,char *child,char *keyname,char * keyvalue)
{
	HKEY handle=NULL,hinter=NULL;
     unsigned long create=0;
     LONG ret=RegCreateKeyEx(parent,child,0,"",REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hinter,&create);
	if(ret!=ERROR_SUCCESS)
		return FALSE;
	ret=RegSetValueEx(hinter,keyname,0,REG_SZ,(BYTE *)keyvalue,strlen(keyvalue));
	RegCloseKey(hinter);
	return (ret==ERROR_SUCCESS);
}

//获取登录库字符串键值(主键,子键,键值名,键值)
DWORD COrganizeInifile::GetDwordKey(HKEY parent,char *child,char *keyname)
{
	HKEY keyhand;
	LONG ret=RegOpenKeyEx(parent,child,0,KEY_ALL_ACCESS,&keyhand);
	if(ret!=ERROR_SUCCESS)
		return 0;
	DWORD type=REG_DWORD;
	DWORD data;
     DWORD size=sizeof(DWORD);
	ret=RegQueryValueEx(keyhand,keyname,0,&type,(BYTE *)&data,&size);
	if(ret!=ERROR_SUCCESS)
		return 0;
	RegCloseKey(keyhand);
	return data;
}

char *COrganizeInifile::GetStringKey(HKEY parent,char *child,char *keyname)
{
	HKEY keyhand;
	LONG ret=RegOpenKeyEx(parent,child,0,KEY_ALL_ACCESS,&keyhand);
	if(ret!=ERROR_SUCCESS)
		return NULL;

	DWORD type=REG_SZ;
	char  data[1000];
     DWORD size=1000;
	ret=RegQueryValueEx(keyhand,keyname,0,&type,(BYTE *)&data,&size);
	if(ret!=ERROR_SUCCESS)
		return NULL;
	RegCloseKey(keyhand);
	return &data[0];
}

BOOL COrganizeInifile::DeleteKey(HKEY parent,char *child,char *keyname)
{
	HKEY keyhand;
	LONG ret=RegOpenKeyEx(parent,child,0,KEY_ALL_ACCESS,&keyhand);
	if(ret!=ERROR_SUCCESS)
		return FALSE;

	ret=RegDeleteKey(keyhand,keyname);
	if(ret!=ERROR_SUCCESS)
		return FALSE;

	RegCloseKey(keyhand);
	return (ret==ERROR_SUCCESS);
}

BOOL COrganizeInifile::DeleteKeyValue(HKEY parent,char *child,char *valuename)
{
	HKEY keyhand;
	LONG ret=RegOpenKeyEx(parent,child,0,KEY_ALL_ACCESS,&keyhand);
	if(ret!=ERROR_SUCCESS)
		return FALSE;

	ret=RegDeleteValue(keyhand,valuename);
	if(ret!=ERROR_SUCCESS)
		return FALSE;
	
	RegCloseKey(keyhand);
	return (ret==ERROR_SUCCESS);
}

BOOL COrganizeInifile::SaveKeyAsFile(HKEY parent,char *child,char *filename)
{
	HKEY keyhand;
	LONG ret=RegOpenKeyEx(parent,child,0,KEY_ALL_ACCESS,&keyhand);
	if(ret!=ERROR_SUCCESS)
		return FALSE;

	ret=RegSaveKey(keyhand,filename,NULL);
	if(ret!=ERROR_SUCCESS)
		return FALSE;
	
	RegCloseKey(keyhand);
	return (ret==ERROR_SUCCESS);
}

BOOL COrganizeInifile::SaveFileAsKey(HKEY parent,char *child,char *filename)
{
	DWORD ret=RegLoadKey(parent,child,filename);
	return (ret==ERROR_SUCCESS);
}

BOOL COrganizeInifile::SubkeyExist(HKEY parent,char *child,char *subname)
{
	BOOL m_ret=FALSE;
	HKEY m_key=parent;
	if(RegOpenKeyEx(parent,child,0,KEY_ALL_ACCESS,&m_key)==ERROR_SUCCESS)
	{
		char m_name[200];
		DWORD m_namelen=200,m_index=0;
		memset(m_name,0,200);

		while(RegEnumKey(m_key,m_index,m_name,m_namelen)==ERROR_SUCCESS)
		{
			if(strcmpi(m_name,subname)==0)
			{
				m_ret=TRUE;
				break;
			}
			m_index++;
			m_namelen=200;
			memset(m_name,0,200);
		}
		RegCloseKey(m_key);
	}
	return m_ret;
}

BOOL COrganizeInifile::KeynameExist(HKEY parent,char *child,char *keyname)
{
	BOOL m_ret=FALSE;
	HKEY m_key=parent;
	if(RegOpenKeyEx(parent,child,0,KEY_ALL_ACCESS,&m_key)==ERROR_SUCCESS)
	{
		char m_name[200];
		DWORD m_namelen=200,m_index=0;
		DWORD m_attr=REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_NONE|REG_SZ;
		memset(m_name,0,200);

		while(RegEnumValue(m_key,m_index,m_name,&m_namelen,NULL,&m_attr,NULL,NULL)==ERROR_SUCCESS)
		{
			if(strcmpi(m_name,keyname)==0)
			{
				m_ret=TRUE;
				break;
			}
			m_index++;
			m_namelen=200;
			memset(m_name,0,200);
		}
		RegCloseKey(m_key);
	}
	return m_ret;
}

//Visual C++ 版本
BOOL COrganizeInifile::CreateDwordKey(HKEY parent,CString child,CString keyname,DWORD value)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_keyname=keyname.GetBuffer(keyname.GetLength());
	return CreateDwordKey(parent,m_child,m_keyname,value);
}

BOOL COrganizeInifile::CreateBinaryKey(HKEY parent,CString child,CString keyname,long value)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_keyname=keyname.GetBuffer(keyname.GetLength());
	return CreateBinaryKey(parent,m_child,m_keyname,value);
}

BOOL COrganizeInifile::CreateStringKey(HKEY parent,CString child,CString keyname,CString keyvalue)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_keyname=keyname.GetBuffer(keyname.GetLength());
	char *m_keyvalue=keyvalue.GetBuffer(keyvalue.GetLength());
	return CreateStringKey(parent,m_child,m_keyname,m_keyvalue);
}

DWORD COrganizeInifile::GetDwordKey(HKEY parent,CString child,CString keyname)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_keyname=keyname.GetBuffer(keyname.GetLength());
	return GetDwordKey(parent,m_child,m_keyname);
}

CString COrganizeInifile::GetStringKey(HKEY parent,CString child,CString keyname)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_keyname=keyname.GetBuffer(keyname.GetLength());
	return _T(GetStringKey(parent,m_child,m_keyname));
}

BOOL COrganizeInifile::DeleteKey(HKEY parent,CString child,CString keyname)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_keyname=keyname.GetBuffer(keyname.GetLength());
	return DeleteKey(parent,m_child,m_keyname);
}

BOOL COrganizeInifile::DeleteKeyValue(HKEY parent,CString child,CString valuename)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_valuename=valuename.GetBuffer(valuename.GetLength());
	return DeleteKeyValue(parent,m_child,m_valuename);
}

BOOL COrganizeInifile::SaveKeyAsFile(HKEY parent,CString child,CString filename)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_filename=filename.GetBuffer(filename.GetLength());
	return SaveKeyAsFile(parent,m_child,m_filename);
}

BOOL COrganizeInifile::SaveFileAsKey(HKEY parent,CString child,CString filename)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_filename=filename.GetBuffer(filename.GetLength());
	return SaveFileAsKey(parent,m_child,m_filename);
}

BOOL COrganizeInifile::SubkeyExist(HKEY parent,CString child,CString subname)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_subname=subname.GetBuffer(subname.GetLength());
	return SubkeyExist(parent,m_child,m_subname);
}

BOOL COrganizeInifile::KeynameExist(HKEY parent,CString child,CString keyname)
{
	char *m_child=child.GetBuffer(child.GetLength());
	char *m_keyname=keyname.GetBuffer(keyname.GetLength());
	return KeynameExist(parent,m_child,m_keyname);
}

void COrganizeInifile::DeleteFileLink(CString m_extname)
{
	CString m_link=GetStringKey(HKEY_CLASSES_ROOT,_T(".")+m_extname,_T(""));
	DeleteKey(HKEY_CLASSES_ROOT,_T(""),m_link);
	DeleteKey(HKEY_CLASSES_ROOT,_T(""),_T(".")+m_extname);
}

void COrganizeInifile::AddFileLink(CString m_extname,CString m_exefile,CString m_footname,CString m_menuname)
{
	CreateStringKey(HKEY_CLASSES_ROOT,_T(".")+m_extname,_T(""),m_extname);
	CreateStringKey(HKEY_CLASSES_ROOT,m_extname,_T(""),m_footname);
	CreateStringKey(HKEY_CLASSES_ROOT,m_extname+_T("\\DefauleIcon"),_T(""),m_exefile+_T(",1"));
	CreateStringKey(HKEY_CLASSES_ROOT,m_extname+_T("\\shell"),_T(""),m_menuname);

	CString m_thiskey=m_extname+_T("\\shell\\");
	m_thiskey+=m_menuname;
	m_thiskey+=_T("\\Command");
	CreateStringKey(HKEY_CLASSES_ROOT,m_thiskey,_T(""),m_exefile+_T(" \"%1\""));
}

⌨️ 快捷键说明

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