Re[3]: Реестр
От: MicVit  
Дата: 15.04.05 18:53
Оценка: 2 (1)
Вот у меня была функция, которая рекурсивно заполняла TreeCtrl на основе произвольного ключа из реестра (т.е. можно и HKEY_CURRENT_USER\Software).
Тут более простой случай. Но как идея может сгодится.
Она только разделы дает, т.е. там надо еще RegQueryValueEx приделать.



void CMainFrame::ShowWorkspaceItem(HKEY hKey, LPCTSTR lpSubKey, HTREEITEM hParent)
{
    CTreeCtrl* pTreeCtrl = (CTreeCtrl*)m_wndWorkspace.GetDlgItem(IDC_TREE1);

    HKEY hVarsKey;
    LONG nReturn;
    DWORD dwDisposition;

    nReturn = RegCreateKeyEx(hKey, lpSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, 
                            KEY_READ, NULL, &hVarsKey, &dwDisposition); 
    ASSERT(nReturn == ERROR_SUCCESS);


    DWORD dwIndex;                // index of enumerated subkey
    CString strName;            // name of enumerated subkey
    DWORD dwNameSize;            // name size of enumerated subkey
    DWORD dwSubKeys;            // number of subkeys
    DWORD dwMaxSubKeyLen;        // maximum name size
     FILETIME ftLastWriteTime;    // last modified time of enumerated subkey(s) (NT only?)

    nReturn = RegQueryInfoKey(hVarsKey, NULL, NULL, NULL, &dwSubKeys, &dwMaxSubKeyLen, NULL, NULL, NULL, NULL, NULL, &ftLastWriteTime);
     ASSERT(nReturn == ERROR_SUCCESS);
    
    if (hParent != TVI_ROOT)
    {
        pTreeCtrl->SetItemData(hParent, (DWORD)hVarsKey);
    }
    else
    {
        m_hRootKey = hVarsKey;
    }
    
    // get the info about each item
    for (dwIndex = 0; dwIndex < dwSubKeys; dwIndex++)
    {
        dwNameSize = dwMaxSubKeyLen + 1;

        nReturn = RegEnumKeyEx(hVarsKey, dwIndex, strName.GetBuffer(dwMaxSubKeyLen), &dwNameSize, NULL, NULL, NULL, &ftLastWriteTime);
        strName.ReleaseBuffer();
        ASSERT(nReturn == ERROR_SUCCESS);
                

        HTREEITEM hItem = pTreeCtrl->InsertItem(strName, hParent);
        ShowWorkspaceItem(hVarsKey, strName, hItem);

    }
    
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.