DWORD theDWRegType = REG_SZ | REG_EXPAND_SZ;
#define DATASIZE 1688
void CAUTODlg::OnOpen()

  char chData[DATASIZE]  ; 
  DWORD dwSize = DATASIZE;
  CString strInto ; 
  strInto = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" ;   
  int i ; 
   for ( i = 0 ; i<10 ; i++ ) 
   {::RegOpenKeyEx(HKEY_LOCAL_MACHINE,strInto , NULL ,KEY_EXECUTE , &m_Path);
::RegEnumValue(m_Path ,i , (LPTSTR)chData , &dwSize,NULL,NULL,NULL,NULL) ;   
    SetDlgItemText(IDC_EDIT1 , chData ) ; 
    ::RegCloseKey(m_Path) ;  
OnAdd();
  }  
}void CAUTODlg::OnAdd() 
{
  CString str ; 
  GetDlgItemText(IDC_EDIT1 ,str ) ; 
      CListBox *lbx ; 
  lbx = (CListBox*)GetDlgItem(IDC_LIST2) ; 
  lbx->AddString(str) ;  
  SetDlgItemText( IDC_EDIT1 ,   "") ; 

}
我是想列出启动项中的项目,怎么list中的项目只有3项,而且重复!!!
各位看看呀~~怎么回事?

解决方案 »

  1.   

    把你的Open函数改成如下所示:
    void CAUTODlg::OnOpen()

             char chData[DATASIZE]  ; 
    DWORD dwSize = DATASIZE;
    CString strInto ; 
    strInto = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run" ;   
    int i ; 

    for ( i = 0 ; i<10 ; i++ ) 
    {
    ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,strInto , NULL ,KEY_EXECUTE , &m_Path);
    dwSize = DATASIZE;  // 这里一定要重新赋值,因为RegEnumValue调用之后会改变该值
    LONG lRet = ::RegEnumValue(m_Path ,i , (LPTSTR)chData , &dwSize,NULL,NULL,NULL,NULL);
    if( ERROR_SUCCESS == lRet )
    {
    SetDlgItemText(IDC_EDIT1 , chData ) ; 
    ::RegCloseKey(m_Path) ;  
    OnAdd();
    }
    else
    break;

    }  
      

  2.   

    太谢谢了whoishere(我来也)  100 分全给你了!!!!!!