Vc 枚举注册表键值名

来源:互联网 发布:阿里阿里 编辑:程序博客网 时间:2024/06/06 04:41

  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;

 

 

 

}         

原创粉丝点击