`
tcspecial
  • 浏览: 897245 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

windows注册表读取

阅读更多
/**
 *@brief 原生windows api方式读取,处理起来比较麻烦
 *调用:RegQuery1(0x80000002,"SYSTEM\\CurrentControlSet\\services\\sysvmsq\\Parameters","msg_max");
 */
bool RegQuery1(int pKey,const char *pSubKey,const char *szKey)
{
	HKEY hKey;

	//  打开注册表
	LONG lResult=RegOpenKeyEx((HKEY)pKey,pSubKey,0,KEY_READ,&hKey);
	if(lResult!=ERROR_SUCCESS)
		return false;
	
	// szValue为接收数据缓冲区,如果是非字符串类型,就要对该缓冲区数据进行处理
	char szValue[512];  
	DWORD pType;
	DWORD pSize;
	
	// 查询注册表
	LONG ret=RegQueryValueEx(hKey,szKey,0,&pType,(LPBYTE)szValue,&pSize);
	RegCloseKey(hKey);

	// 值类型判断解析
	if(pType==REG_DWORD)  // 整数
	{
	    // 方法一: DWORD占四字节大小,只需取szValue4字节数据
		// 通过查看0x0012fc44内存发现,即 00 00 04 00
		// Intel系列CPU一般以小端形式存放数据,此时值应为0x00040000(262144) 
		DWORD dValue=0;
		dValue|=szValue[3]<<24;
		dValue|=szValue[2]<<16;
		dValue|=szValue[1]<<8;
		dValue|=szValue[0];
		
		// 方法二: 直接内存拷贝即可
		DWORD ddValue=0;
		memcpy((void*)&ddValue,(void*)szValue,sizeof(DWORD));
	}

	return true;
}


/**
 *@brief QT方式读取,QSettings提供了简洁的访问接口
 */
QString RegQuery2()
{
	QString path="HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\services\\sysvmsq";
	QSettings settings(path,QSettings::NativeFormat);

	// 获取组Parameters下键为msg_max的值
	settings.beginGroup("Parameters");
	QString pVal=settings.value("msg_max").toString();
	settings.endGroup();
	
	return pVal;
}

 

 运行截图:

 

 

 

  • 大小: 48.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics