如上

解决方案 »

  1.   

    RegEnumValue HWND hcombo;
    GetDlgItem(IDCB_CONNECTIONS,&hcombo);
    CComboBox cmb;
    cmb.Attach(hcombo);
    HKEY hk;
        const TCHAR* keyname3=_T("software\\Microsoft\\windows\\currentversion\\Internet Settings\\Connections");
        LONG lret=RegOpenKeyEx(HKEY_CURRENT_USER,keyname3,NULL,
            KEY_READ|KEY_WRITE|KEY_SET_VALUE|KEY_ENUMERATE_SUB_KEYS,&hk);
        if(lret==ERROR_SUCCESS&&NULL!=hk)
        {
    LONG enum_ret=0;
    DWORD index=0;
    do
    {
    TCHAR valuename[256];
    DWORD value_len=sizeof(valuename);
    valuename[0]=0;
    TCHAR databuf[256];
    databuf[0]=0;
    DWORD databuf_len=sizeof(databuf);
    DWORD type;
    enum_ret = RegEnumValue(hk,index,valuename,&value_len,NULL,&type,(LPBYTE)databuf,&databuf_len);
    // enum_ret=RegEnumKey(hk,index,keyname,buflen);
    if(ERROR_SUCCESS==enum_ret&&_tcslen(valuename)>0&&type==REG_BINARY)
    {
    cmb.AddString(valuename);
    }
    index++;
    }
    while(enum_ret==ERROR_SUCCESS);
    if(enum_ret!=ERROR_NO_MORE_ITEMS)
    {
    LPVOID lpMsgBuf;
    if (!FormatMessage( 
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM | 
    FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    enum_ret,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    (LPTSTR) &lpMsgBuf,
    0,
    NULL ))
    {
    // Handle the error.
    }

    // Process any inserts in lpMsgBuf.
    // ...

    // Display the string.
    ::MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );

    // Free the buffer.
    LocalFree( lpMsgBuf );
    }
    RegCloseKey(hk);
        }
    else
    {
    std::ostringstream oss;
    oss<<__FILE__<<":"<<__LINE__<<" open HKEY_CURRENT_USER\\"<<keyname3<<" error";
    OutputDebugString(oss.str().c_str());
    }
    if(cmb.GetCount()>0)
    cmb.SetCurSel(0);
    cmb.Detach();
      

  2.   

    http://expert.csdn.net/Expert/topic/1557/1557750.xml?temp=.6005365
      

  3.   

    仔细研究注册表函数:RegOpenEx,RegEnumKeyEx,RegEnumValue,便可以理解上面的程序。