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

📄 appregistry.cpp

📁 研华ADAN4050 检测程序(自做) 压缩文件中 无密码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// AppRegistry.cpp: implementation of the CAppRegistry class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "AppRegistry.h"
#include "stdio.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CAppRegistry::CAppRegistry()
{
	m_hRegRootKey=APPREG_DEFROOTKEY;
	::_stprintf(m_atcRoot,APPREG_DEFROOTITEM);
	::_stprintf(m_atcCom,_T("Unknown Company"));
	::_stprintf(m_atcApp,_T("Unknown Application"));
	::_stprintf(m_atcVer,_T("Unknown Version"));
	::_stprintf(m_atcItem,_T("Unknown Item"));
}

CAppRegistry::CAppRegistry(LPCTSTR lpszCom, //公司名称
						   LPCTSTR lpszApp, //应用程序名称
						   LPCTSTR lpszVer, //应用程序版本
						   LPCTSTR lpszItem) //项目名称
{
	m_hRegRootKey=APPREG_DEFROOTKEY;
	::_stprintf(m_atcRoot,APPREG_DEFROOTITEM);
	::_stprintf(m_atcCom,APPREG_SAFESTRPTR(lpszCom));
	::_stprintf(m_atcApp,APPREG_SAFESTRPTR(lpszApp));
	::_stprintf(m_atcVer,APPREG_SAFESTRPTR(lpszVer));
	::_stprintf(m_atcItem,APPREG_SAFESTRPTR(lpszItem));
}

CAppRegistry::~CAppRegistry()
{

}

//设置应用程序注册表对象的公司名称
//<参数>
//	lpszCompany: 以NULL结束的公司名称字符串
//<返回值>
//	返回lpszCompany的长度。
int CAppRegistry::SetCompany(LPCTSTR lpszCompany)
{
	::lstrcpy(m_atcCom,APPREG_SAFESTRPTR(lpszCompany));
	return ::lstrlen(m_atcCom);
}

//获取应用程序注册表对象的公司名称
//<参数>
//<返回值>
//	返回应用程序注册表对象的公司名称。
LPCTSTR CAppRegistry::GetCompany() const
{
	return m_atcCom;
}

//设置应用程序注册表对象的应用程序名称
//<参数>
//	lpszApp: 以NULL结束的应用程序名称字符串
//<返回值>
//	返回lpszApp的长度。
int CAppRegistry::SetApplication(LPCTSTR lpszApp)
{
	::lstrcpy(m_atcApp,APPREG_SAFESTRPTR(lpszApp));
	return ::lstrlen(m_atcApp);
}

//获取应用程序注册表对象的应用程序名称
//<参数>
//<返回值>
//	返回应用程序注册表对象的应用程序名称。
LPCTSTR CAppRegistry::GetApplication() const
{
	return m_atcApp;
}

//设置应用程序注册表对象的版本
//<参数>
//	lpszVersion: 以NULL结束的版本字符串
//<返回值>
//	返回lpszVersion的长度。
int CAppRegistry::SetVersion(LPCTSTR lpszVersion)
{
	::lstrcpy(m_atcVer,APPREG_SAFESTRPTR(lpszVersion));
	return ::lstrlen(m_atcVer);
}

//获取应用程序注册表对象的版本
//<参数>
//<返回值>
//	返回应用程序注册表对象的版本字符串。
LPCTSTR CAppRegistry::GetVersion() const
{
	return m_atcVer;
}

//设置应用程序注册表对象的项目名称
//<参数>
//	lpszItem: 以NULL结束的项目名称字符串
//<返回值>
//	返回lpszItem的长度。
int CAppRegistry::SetItem(LPCTSTR lpszItem)
{
	::lstrcpy(m_atcItem,APPREG_SAFESTRPTR(lpszItem));
	return ::lstrlen(m_atcItem);
}

//获取应用程序注册表对象的项目名称
//<参数>
//<返回值>
//	返回应用程序注册表对象的项目名称。
LPCTSTR CAppRegistry::GetItem() const
{
	return m_atcItem;
}

//设置应用程序注册表对象的根项名称,根项缺省为“SOFTWARE”
//<参数>
//	lpszRoot: 以NULL结束的根项名称字符串
//<返回值>
//	返回lpszRoot的长度。
int CAppRegistry::SetRoot(LPCTSTR lpszRoot)
{
	::lstrcpy(m_atcRoot,APPREG_SAFESTRPTR(lpszRoot));
	return ::lstrlen(m_atcRoot);
}

//获取应用程序注册表对象的根项名称,根项缺省为“SOFTWARE”
//<参数>
//<返回值>
//	返回应用程序注册表对象的根项名称。
LPCTSTR CAppRegistry::GetRoot() const
{
	return m_atcRoot;
}

//在注册表中保存一个long值
//<参数>
//	lpszSubItem: 以NULL结束的子项目名称字符串
//	lpszName: 以NULL结束的long值名称字符串
//	liVal: 要保存的long值
//<返回值>
//	如果成功返回TRUE,否则返回FALSE。
//	lVal将被保存在系统注册表的
//“HKEY_LOCAL_MACHINE\根项\公司名称\应用程序名称\版本\项目\子项目\long值名称”
//位置。
BOOL CAppRegistry::SetRegLong(LPCTSTR lpszSubItem, LPCTSTR lpszName, long lVal) const
{
	if(::lstrlen(APPREG_SAFESTRPTR(lpszSubItem))>=APPREG_MAXSUBITEM)
		return FALSE;
	if(::lstrlen(APPREG_SAFESTRPTR(lpszName))>=APPREG_MAXNAME)
		return FALSE;

	BOOL bRet;
	DWORD dwDis;
	HKEY hRegKey;
	long lRetVal;
	TCHAR atcPath[APPREG_MAXPATH];

	::_stprintf(atcPath,_T("%s\\%s\\%s\\%s\\%s\\%s"),
		m_atcRoot,
		m_atcCom,
		m_atcApp,
		m_atcVer,
		m_atcItem,
		APPREG_SAFESTRPTR(lpszSubItem));//合成合法注册表路径字符串
	//排除非法路径
	for(int i=0;atcPath[i];i++)
	{
		//如果有连续的'\'或者最后一个字符为'\'或者第一个字符为'\'...
		if(atcPath[i]==TCHAR('\\')&&(atcPath[i+1]==TCHAR('\\')||atcPath[i+1]==TCHAR(0)||i==0))
		{
			for(int j=i;atcPath[j];j++)
			{
				atcPath[j]=atcPath[j+1];
			}
		}
	}
	lRetVal=::RegCreateKeyEx(m_hRegRootKey,
		atcPath,
		0,
		NULL,
		REG_OPTION_NON_VOLATILE,
		KEY_ALL_ACCESS,//KEY_CREATE_SUB_KEY|KEY_READ|KEY_WRITE,
		NULL,
		&hRegKey,
		&dwDis);
	if(lRetVal==ERROR_SUCCESS)
	{
		//将long值以DWORD的形式保存到注册表中
		lRetVal=::RegSetValueEx(hRegKey,APPREG_SAFESTRPTR(lpszName),0,REG_DWORD,LPBYTE(&lVal),sizeof(lVal));
		if(lRetVal==ERROR_SUCCESS)
			bRet=TRUE;
		else
			bRet=FALSE;
		::RegCloseKey(hRegKey);
	} //if(lRetVal==ERROR_SUCCESS)
	else
		bRet=FALSE;
	return bRet;
}

//在注册表中读取一个long值
//<参数>
//	lpszSubItem: 以NULL结束的子项目名称字符串
//	lpszName: 以NULL结束的long值名称字符串
//	rlVal: 用来long值的变量的引用
//<返回值>
//	如果成功返回TRUE,否则返回FALSE。
//	GetRegLong将从系统注册表的
//“HKEY_LOCAL_MACHINE\根项\公司名称\应用程序名称\版本\项目\子项目\long值名称”
//处读取一个long值。
BOOL CAppRegistry::GetRegLong(LPCTSTR lpszSubItem, LPCTSTR lpszName, long &rlVal) const
{
	if(::lstrlen(APPREG_SAFESTRPTR(lpszSubItem))>=APPREG_MAXSUBITEM)
		return FALSE;
	if(::lstrlen(APPREG_SAFESTRPTR(lpszName))>=APPREG_MAXNAME)
		return FALSE;

	BOOL bRet;
	DWORD dwDis;
	HKEY hRegKey;
	long lRetVal;
	TCHAR atcPath[APPREG_MAXPATH];

	::_stprintf(atcPath,_T("%s\\%s\\%s\\%s\\%s\\%s"),
		m_atcRoot,
		m_atcCom,
		m_atcApp,
		m_atcVer,
		m_atcItem,
		APPREG_SAFESTRPTR(lpszSubItem));//合成合法注册表路径字符串
	//排除非法路径
	for(int i=0;atcPath[i];i++)
	{
		//如果有连续的'\'或者最后一个字符为'\'或者第一个字符为'\'...
		if(atcPath[i]==TCHAR('\\')&&(atcPath[i+1]==TCHAR('\\')||atcPath[i+1]==TCHAR(0)||i==0))
		{
			for(int j=i;atcPath[j];j++)
			{
				atcPath[j]=atcPath[j+1];
			}
		}
	}
	lRetVal=::RegCreateKeyEx(m_hRegRootKey,
		atcPath,
		0,
		NULL,
		REG_OPTION_NON_VOLATILE,
		KEY_ALL_ACCESS,//KEY_CREATE_SUB_KEY|KEY_READ|KEY_WRITE,
		NULL,
		&hRegKey,
		&dwDis);
	if(lRetVal==ERROR_SUCCESS)
	{
		DWORD dwType,dwDataSize,dwData;
		lRetVal=::RegQueryValueEx(hRegKey,APPREG_SAFESTRPTR(lpszName),NULL,&dwType,NULL,&dwDataSize);
		//如果查询类型成功,并且查询到的类型是DWORD型
		if(lRetVal==ERROR_SUCCESS&&dwType==REG_DWORD)
		{
			//读取一个DWORD数据
			lRetVal=::RegQueryValueEx(hRegKey,APPREG_SAFESTRPTR(lpszName),NULL,&dwType,LPBYTE(&dwData),&dwDataSize);
			if(lRetVal==ERROR_SUCCESS&&dwType==REG_DWORD)
			{
				bRet=TRUE;
				rlVal=long(dwData);
			}
			else
				bRet=FALSE;
		}
		else
			bRet=FALSE;
		::RegCloseKey(hRegKey);
	} //if(lRetVal==ERROR_SUCCESS)
	else
		bRet=FALSE;
	return bRet;
}

//在注册表中保存一个字符串
//<参数>
//	lpszSubItem: 以NULL结束的子项目名称字符串
//	lpszName: 以NULL结束的int值名称字符串
//	lpszString: 要保存的字符串
//<返回值>
//	如果成功返回TRUE,否则返回FALSE。
//	lpszString将被保存在系统注册表的
//“HKEY_LOCAL_MACHINE\根项\公司名称\应用程序名称\版本\项目\子项目\字符串值名称”
//位置。
BOOL CAppRegistry::SetRegString(LPCTSTR lpszSubItem, LPCTSTR lpszName, LPCTSTR lpszString) const
{
	if(::lstrlen(APPREG_SAFESTRPTR(lpszSubItem))>=APPREG_MAXSUBITEM)
		return FALSE;
	if(::lstrlen(APPREG_SAFESTRPTR(lpszName))>=APPREG_MAXNAME)
		return FALSE;
	if(lpszString==NULL)
		return FALSE;

	BOOL bRet;
	DWORD dwDis;
	HKEY hRegKey;
	long lRetVal;
	TCHAR atcPath[APPREG_MAXPATH];

	::_stprintf(atcPath,_T("%s\\%s\\%s\\%s\\%s\\%s"),
		m_atcRoot,
		m_atcCom,
		m_atcApp,
		m_atcVer,
		m_atcItem,
		APPREG_SAFESTRPTR(lpszSubItem)); //合成合法注册表路径字符串
	//排除非法路径
	for(int i=0;atcPath[i];i++)
	{
		//如果有连续的'\'或者最后一个字符为'\'或者第一个字符为'\'...
		if(atcPath[i]==TCHAR('\\')&&(atcPath[i+1]==TCHAR('\\')||atcPath[i+1]==TCHAR(0)||i==0))
		{
			for(int j=i;atcPath[j];j++)
			{
				atcPath[j]=atcPath[j+1];
			}
		}
	}
	lRetVal=::RegCreateKeyEx(m_hRegRootKey,
		atcPath,
		0,
		NULL,
		REG_OPTION_NON_VOLATILE,
		KEY_ALL_ACCESS,//KEY_CREATE_SUB_KEY|KEY_READ|KEY_WRITE,
		NULL,
		&hRegKey,
		&dwDis);
	if(lRetVal==ERROR_SUCCESS)
	{
		lRetVal=::RegSetValueEx(hRegKey,APPREG_SAFESTRPTR(lpszName),0,REG_SZ,LPBYTE(APPREG_SAFESTRPTR(lpszString)),(::lstrlen(APPREG_SAFESTRPTR(lpszString))+1)*sizeof(lpszString[0]));
		if(lRetVal==ERROR_SUCCESS)
			bRet=TRUE;
		else
			bRet=FALSE;
		::RegCloseKey(hRegKey);
	}
	else
		bRet=FALSE;
	return bRet;
}

//在注册表中读取指定字符串的长度
//<参数>
//	lpszSubItem: 以NULL结束的子项目名称字符串
//	lpszName: 以NULL结束的int值名称字符串
//<返回值>
//	如果失败返回-1,否则返回指定字符串的长度(包括NULL字符)
//	GetRegStringSize将返回在系统注册表的
//“HKEY_LOCAL_MACHINE\根项\公司名称\应用程序名称\版本\项目\子项目\字符串值名称”
//位置的字符串的长度。
int CAppRegistry::GetRegStringSize(LPCTSTR lpszSubItem, LPCTSTR lpszName) const
{
	if(::lstrlen(APPREG_SAFESTRPTR(lpszSubItem))>=APPREG_MAXSUBITEM)
		return -1;
	if(::lstrlen(APPREG_SAFESTRPTR(lpszName))>=APPREG_MAXNAME)
		return -1;

	int iRet;
	DWORD dwDis;
	HKEY hRegKey;
	long lRetVal;
	TCHAR atcPath[APPREG_MAXPATH];

	::_stprintf(atcPath,_T("%s\\%s\\%s\\%s\\%s\\%s"),
		m_atcRoot,
		m_atcCom,
		m_atcApp,
		m_atcVer,
		m_atcItem,
		APPREG_SAFESTRPTR(lpszSubItem)); //合成合法注册表路径字符串
	//排除非法路径
	for(int i=0;atcPath[i];i++)
	{
		//如果有连续的'\'或者最后一个字符为'\'或者第一个字符为'\'...
		if(atcPath[i]==TCHAR('\\')&&(atcPath[i+1]==TCHAR('\\')||atcPath[i+1]==TCHAR(0)||i==0))
		{
			for(int j=i;atcPath[j];j++)
			{
				atcPath[j]=atcPath[j+1];
			}
		}
	}
	lRetVal=::RegCreateKeyEx(m_hRegRootKey,
		atcPath,
		0,
		NULL,
		REG_OPTION_NON_VOLATILE,
		KEY_ALL_ACCESS,//KEY_CREATE_SUB_KEY|KEY_READ|KEY_WRITE,
		NULL,
		&hRegKey,
		&dwDis);
	if(lRetVal==ERROR_SUCCESS)
	{
		DWORD dwType,dwDataSize;
		lRetVal=::RegQueryValueEx(hRegKey,APPREG_SAFESTRPTR(lpszName),NULL,&dwType,NULL,&dwDataSize);
		if(lRetVal==ERROR_SUCCESS&&dwType==REG_SZ)
			iRet=int(dwDataSize/sizeof(TCHAR)); //将字节长度转换为字符长度
		else
			iRet=-1;
		::RegCloseKey(hRegKey);
	}
	else
		iRet=-1;
	return iRet;
}

//在注册表中读取一个字符串
//<参数>
//	lpszSubItem: 以NULL结束的子项目名称字符串
//	lpszName: 以NULL结束的int值名称字符串
//	lpBuff: 指向用于存放字符串的缓冲区
//	iMaxStr: lpBuff所指缓冲区的容量
//<返回值>
//	如果成功返回TRUE,否则返回FALSE。
//	GetRegString将从系统注册表的
//“HKEY_LOCAL_MACHINE\根项\公司名称\应用程序名称\版本\项目\子项目\字符串值名称”

⌨️ 快捷键说明

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