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

📄 regedit.cpp

📁 visual c++ 实例编程
💻 CPP
字号:
#include "stdafx.h"
#include "RegEdit.h"
#include "HMHFunc.h"


RegEdit::RegEdit()
{
	m_hKey=NULL;
	RootKey=NULL;
}

RegEdit::~RegEdit()
{
	if (m_hKey!=NULL)
		::RegCloseKey(m_hKey);
}

void RegEdit::SetKey(HKEY Key)
{
	m_hKey=Key;
}

//打开一注册键
int RegEdit::OpenKey(LPCTSTR StrKey)
{
	if (RootKey==NULL)
		return 0;
	if (ERROR_SUCCESS==::RegOpenKeyEx(RootKey,StrKey,NULL,KEY_ALL_ACCESS,&m_hKey))
		return 1;
	return 0;
}

int RegEdit::OpenKey(HKEY Key,LPCTSTR StrKey)
{
	RootKey=Key;
	if (ERROR_SUCCESS==::RegOpenKeyEx(RootKey,StrKey,NULL,KEY_ALL_ACCESS,&m_hKey))
		return 1;
	return 0;
}

int RegEdit::OpenKey()
{
	if (RootKey==NULL)
		return 0;
	m_hKey=RootKey;
	return 1;
}

//关闭注册键
int RegEdit::CloseKey()
{
	RootKey=NULL;
	if (ERROR_SUCCESS==::RegCloseKey(m_hKey))
		return 1;
	return 0;
}

//建立一注册键,返回1成功,返回2此键已存在并打开
int RegEdit::CreateKey(LPCTSTR StrKey)
{
	HKEY hKey;
    DWORD dwDisposition;
	
	if (m_hKey==NULL && RootKey!=NULL)
		m_hKey=RootKey;
	if (ERROR_SUCCESS!=::RegCreateKeyEx(m_hKey, (LPCTSTR)StrKey,0,NULL,
		REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,
		NULL,&hKey,&dwDisposition))
		return 0;
	else
	{
		m_hKey=hKey;
		if (dwDisposition==REG_CREATED_NEW_KEY)
			return 1;
		else if (dwDisposition==REG_OPENED_EXISTING_KEY)
			return 2;
	}				 
	return 1;
}

//建立一注册键,返回1成功,返回2此键已存在并打开
int RegEdit::CreateKey(HKEY wKey,LPCTSTR StrKey)
{	
	m_hKey=wKey;
	return CreateKey(StrKey);
}


//删除一键值
int RegEdit::DeleteKey(LPCTSTR StrKey)
{
	if (HMHGetWindowVer()!=HMHWINDOWSNT)
	{
		if (ERROR_SUCCESS==::RegDeleteKey(m_hKey,StrKey))
			return 1;
	}
	//在Windows NT必须手工删除各个子键
	else
	{
		HKEY SrcKey=m_hKey;
		char KeyName[256];
		int nRes=0;
				
		if (OpenKey(SrcKey,StrKey))
		{
			nRes=FirstEnumKey(KeyName);
			while (nRes)
			{
				DeleteKey(KeyName);
				nRes=NextEnumKey(KeyName);
			}
		}
		if (::RegDeleteKey(SrcKey,StrKey)==ERROR_SUCCESS)
			return 1;
		else
			return 0;		
	}
	return 0;
}

//删除一键值
int RegEdit::DeleteKey(HKEY RootKey,LPCTSTR StrKey,LPCTSTR DelKey)
{
	if (OpenKey(RootKey,StrKey))
	{
		if (DeleteKey(DelKey))
			return 1;
		else
			return 0;
	}
	else
		return 0;
}

//删除一键值
int RegEdit::DeleteValue(const char *Value)
{
	
	if (ERROR_SUCCESS==RegDeleteValue(m_hKey,Value))
		return 1;
	return 0;
}

//删除一键值
int RegEdit::DeleteValue(HKEY Root,LPCTSTR StrKey,LPCTSTR StrChildKey)
{
	m_hKey=RootKey=Root;
	if (OpenKey(StrKey))
	{
		if (ERROR_SUCCESS==RegDeleteValue(m_hKey,StrChildKey))
			return 1;
		else
			return 0;
	}
	return 0;
}

//读一注册表字符串值
int RegEdit::ReadString(LPCTSTR StrChildKey,CString &Value)
{
	DWORD dwSize=255,dwType=REG_SZ;
	char String[256];
	
	if (ERROR_SUCCESS!=::RegQueryValueEx(m_hKey,StrChildKey,0,&dwType,(BYTE *)String,&dwSize))
		return 0;
	Value=String;
	return 1;
}

//读一注册表DWORD值
int RegEdit::ReadDword(LPCTSTR StrChildKey,DWORD &Value)
{
	DWORD dwSize=255,dwType=REG_DWORD;
	
	if (ERROR_SUCCESS!=::RegQueryValueEx(m_hKey,StrChildKey,0,&dwType,(BYTE *)(&Value),&dwSize))
		return 0;
	return 1;
}

//读一注册表BINARY值
int RegEdit::ReadBinary(LPCTSTR StrChildKey,DWORD &Value)
{
	DWORD dwSize=255,dwType=REG_BINARY;
	
	if (ERROR_SUCCESS!=::RegQueryValueEx(m_hKey,StrChildKey,0,&dwType,(BYTE *)(&Value),&dwSize))
		return 0;
	return 1;					 
}

//读一注册表BINARY值
int RegEdit::ReadBinary(LPCTSTR StrChildKey,char *Value)
{
	DWORD dwSize=255,dwType=REG_BINARY;
    
//	if (ERROR_SUCCESS!=::RegQueryValueEx(m_hKey,StrChildKey,0,&dwType,NULL,&dwSize))
//		return 0;	
	if (ERROR_SUCCESS!=::RegQueryValueEx(m_hKey,StrChildKey,0,&dwType,(BYTE *)Value,&dwSize))
		return 0;
	*(Value+dwSize)=0;
	return 1;					 
}


//写一注册表字符串值
int RegEdit::WriteString(LPCTSTR StrChildKey,LPCTSTR Value,CString DefValue)
{
	if (DefValue!=HMHSTRDEFVALUE)
	{
		if (Value==DefValue)
			return DeleteValue(StrChildKey);
	}
	if (ERROR_SUCCESS==::RegSetValueEx( m_hKey,(LPCTSTR)StrChildKey,0,REG_SZ,(BYTE *)(LPCSTR)Value,strlen(Value)+1) )
		return 1;
	return 0;
}

//写一注册表DWORD值
int RegEdit::WriteDword(LPCTSTR StrChildKey,DWORD Value,DWORD DefValue)
{
	if (DefValue!=HMHDWORDDEFVALUE)
	{
		if (Value==DefValue)
			return DeleteValue(StrChildKey);
	}
	if (ERROR_SUCCESS==::RegSetValueEx( m_hKey,(LPCTSTR)StrChildKey,0,REG_DWORD,(BYTE *)&Value,sizeof(Value)) )
		return 1;
	return 0;
}

//写一注册表二进制值
int RegEdit::WriteBinary(LPCTSTR StrChildKey,DWORD Value,DWORD DefValue)
{
	if (DefValue!=HMHDWORDDEFVALUE)
	{
		if (Value==DefValue)
			return DeleteValue(StrChildKey);
	}
	if (ERROR_SUCCESS==::RegSetValueEx( m_hKey,(LPCTSTR)StrChildKey,0,REG_BINARY,(BYTE *)&Value,sizeof(Value)) )
		return 1;
	return 0;
}

//写一注册表二进制值
int RegEdit::WriteBinary(LPCTSTR StrChildKey,const char *Value)
{
	if (ERROR_SUCCESS==::RegSetValueEx( m_hKey,(LPCTSTR)StrChildKey,0,REG_BINARY,(BYTE *)Value,strlen(Value)) )
		return 1;
	return 0;
}

int RegEdit::GetStringValue(HKEY Root,LPCTSTR StrKey,LPCTSTR StrChildKey,CString &Value)
{
	RootKey=Root;
	if (OpenKey(StrKey))
	{
		if (ReadString(StrChildKey,Value))
			return 1;
		return 0;
	}
	return 0;
}

int RegEdit::GetDwordValue(HKEY Root,LPCTSTR StrKey,LPCTSTR StrChildKey,DWORD &Value)
{
	RootKey=Root;
	if (OpenKey(StrKey))
	{
		if (ReadDword(StrChildKey,Value))
			return 1;
		return 0;
	}
	return 0;
}

int RegEdit::GetBinaryValue(HKEY Root,LPCTSTR StrKey,LPCTSTR StrChildKey,DWORD &Value)
{				
	RootKey=Root;
	if (OpenKey(StrKey))
	{
		if (ReadBinary(StrChildKey,Value))
			return 1;
		return 0;
	}
	return 0;
}

int RegEdit::GetBinaryValue(HKEY Root,LPCTSTR StrKey,LPCTSTR StrChildKey,char *Value)
{				
	RootKey=Root;
	if (OpenKey(StrKey))
	{
		if (ReadBinary(StrChildKey,Value))
			return 1;
		return 0;
	}
	return 0;
}

int RegEdit::SetStringValue(HKEY Root,LPCTSTR StrKey,LPCTSTR StrChildKey,LPCTSTR Value,CString DefValue)
{
	m_hKey=RootKey=Root;
	if (CreateKey(StrKey))
	{
		if (WriteString(StrChildKey,Value,DefValue))
			return 1;
		return 0;
	}
	return 0;
}

int RegEdit::SetDwordValue(HKEY Root,LPCTSTR StrKey,LPCTSTR StrChildKey,DWORD Value,DWORD DefValue)
{
	m_hKey=RootKey=Root;
	if (CreateKey(StrKey))
	{
		if (WriteDword(StrChildKey,Value,DefValue))
			return 1;
		return 0;
	}
	return 0;
}

int RegEdit::SetBinaryValue(HKEY Root,LPCTSTR StrKey,LPCTSTR StrChildKey,DWORD Value,DWORD DefValue)
{
	m_hKey=RootKey=Root;
	if (CreateKey(StrKey))
	{
		if (WriteBinary(StrChildKey,Value,DefValue))
			return 1;
		return 0;
	}
	return 0;
}

int RegEdit::SetBinaryValue(HKEY Root,LPCTSTR StrKey,LPCTSTR StrChildKey,const char *Value)
{
	m_hKey=RootKey=Root;
	if (CreateKey(StrKey))
	{
		if (WriteBinary(StrChildKey,Value))
			return 1;
		return 0;
	}
	return 0;
}

//循环获取键名
int RegEdit::FirstEnumKey(char *Value)
{
	DWORD dwSize=255;
	EnumLoop=0;
	
	if (ERROR_SUCCESS==::RegEnumKeyEx(m_hKey,EnumLoop,Value,&dwSize,NULL,NULL,NULL,NULL))
		return 1;
	return 0;
}

//下一个键名  
int RegEdit::NextEnumKey(char *Value)
{
	DWORD dwSize=255;
	EnumLoop++;
	if (ERROR_SUCCESS==::RegEnumKeyEx(m_hKey,EnumLoop,Value,&dwSize,NULL,NULL,NULL,NULL))
		return 1;
	return 0;
}

//循环获取值名
int RegEdit::FirstEnumValue(char *Value,void *data)
{
	DWORD dwSize=255,dwType,dwDsize=255;;
	EnumLoop=0;
	
	if (ERROR_SUCCESS==::RegEnumValue(m_hKey,EnumLoop,Value,&dwSize,NULL,&dwType,(LPBYTE)data,&dwDsize))
		return 1;
	return 0;
}

//下一个值名
int RegEdit::NextEnumValue(char *Value,void *Data)
{
	DWORD dwSize=255,dwType,dwDsize=255;
	EnumLoop++;
	if (ERROR_SUCCESS==::RegEnumValue(m_hKey,EnumLoop,Value,&dwSize,NULL,&dwType,(LPBYTE)Data,&dwDsize))
		return 1;
	return 0;
}


//查询键值信息
int RegEdit::QueryValue(LPCTSTR ValueKey,DWORD &ValueType)
{
	if (ERROR_SUCCESS==::RegQueryValueEx(m_hKey,ValueKey,0,&ValueType,NULL,NULL))
		return 1;
	return 0;
}

//写INI文件字符串
BOOL RegEdit::WriteProfileString(LPCTSTR FileName,LPCTSTR SectionName,LPCTSTR KeyName,LPCTSTR Value,LPCTSTR DefValue)
{
	if (strcmp(DefValue,HMHSTRDEFVALUE))
	{
		if (strcmp(Value,DefValue)==0)
			return ::WritePrivateProfileString(SectionName,KeyName,NULL,FileName);
	}
	return ::WritePrivateProfileString(SectionName,KeyName,Value,FileName);
}

⌨️ 快捷键说明

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