void CEnumRegValueDlg::OnEnum()
{
HKEY lKey; //定义一个键的句柄,用于存储被打开的键
HKEY hKey; //初始的值
CString psKey; //要打开的键的名称
long IResult; //操作注册表函数的返回值
CList<CString,CString&> listvalue; //定义链表存储枚举得到的键值名
CString strList;
DWORD numValues,maxLenValueName,maxLenValueData,lpType,lenValue;
char *ValueName=new char[1024]; //存储得到的键值名
BYTE *lpData=new BYTE[1024]; //存储得到的键值数据
DWORD lenData; //存储键值的数据长度
hKey =HKEY CURRENT USER; //初始根键
psKey="SOFTWARE//MICROSOFT//INTERNET EXPLORE//Main";//子键名称及位置
IResult=RegOpenKeyEx(hKey,LPCSTR(psKey),0,KEY READ,&IKey);
if(ERROR_SUCCESS!=IResult)
{
MessageBox("错误:无法打开有关的注册表键值!");
}
IResult=RegQueryInfoKey(lKey,NULL,NULL,0,NULL,NULL,NULL,&numValues,
&maxLenValueName,&maxLenValueData,NULL,NULL);
if(ERROR_SUCCESS!=IResult)
{
MessageBox("错误:未能正确获取键的信息!");
return;
}
for(int i=0;ERROR SUCCESS==IResult,i<(int)numValues;i++)
{
lenValue=maxLenValueName;
lenData=1024;
//枚举键值
lResult=RegEnumValue(IKey,i,ValueName,&lenValue,0,&lpType,lpData,&lenData);
//将键值放到链表中
strList=ValueName;
listValue.AddTail(strList);
}
//遍历链表,将其值添加到列表框中
POSITION post=listvalue.GetHeadPosition();
while(post!=NULL)
{
strList=listValue.GetNext(post);
m_ctlList.InsertString(-1,strList);
}
delete ValueName;
delete lpData;
}