我现在 用 效率底的方式实现了 。不爽。
 
我原先这样:
      int j=0;
      if(ERROR_SUCCESS!=RegOpenKeyEx(...,&hk)  )
              return ;
      TCHAR name[256],data[256];
      DWORD size1=256,size2=256;
      for(int i=0;;i++)
      {  
         if(ERROR_NO_MORE_ITEMS==(ret::RegEnumValue(hk,i,name,&size1,NULL,NULL,(BYTE*)data,&size2)))
               break;
         if(ERROR_SUCCESS!=ret)
               continue;
         m_list.InsertColumn(j,name);
         m_list.SetItemText(j++,1,data);
      }
         
 只能得到一两项!

解决方案 »

  1.   

                for(int   i=0;;i++) 
                {                  size1=256,size2=256;//每次循环都需要初始化,因为RegEnumValue函数会重新设置两个变量的值.                  if(ERROR_NO_MORE_ITEMS==(ret::RegEnumValue(hk,i,name,&size1,NULL,NULL,(BYTE*)data,&size2))) 
                                  break; 
                      if(ERROR_SUCCESS!=ret) 
                                  continue; 
                      m_list.InsertColumn(j,name); 
                      m_list.SetItemText(j++,1,data); 
                } 
      

  2.   

    谢各位了 ret::RegEnumValue 写错了 应为 ret=::Reg...size真的很重要,真不爽 这么简单的问题 让费了 很多时间。
      

  3.   

    问题如LS所说,应把DWORD size1=256,size2=256;改到循环里面ret::RegEnumValue应该是ret=::RegEnumValue吧?