枚举注册表键名与键值

枚举注册表键名与键值的一个函数:

// QueryKey - Enumerates the subkeys of key, and the associated // values, then copies the information about the keys and values // into a pair of edit controls and list boxes. // hDlg - Dialog box that contains the edit controls and list boxes. // hKey - Key whose subkeys and values are to be enumerated.

void QueryKey(HWND hDlg, HANDLE hKey) { CHAR achKey[MAX_PATH]; CHAR achClass[MAX_PATH] = “”; // buffer for class name DWORD cchClassName = MAX_PATH; // size of class string DWORD cSubKeys; // number of subkeys DWORD cbMaxSubKey; // longest subkey size DWORD cchMaxClass; // longest class string DWORD cValues; // number of values for key DWORD cchMaxValue; // longest value name DWORD cbMaxValueData; // longest value data DWORD cbSecurityDescriptor; // size of security descriptor FILETIME ftLastWriteTime; // last write time

DWORD i, j;
DWORD retCode, retValue;

CHAR  achValue[MAX_VALUE_NAME];
DWORD cchValue = MAX_VALUE_NAME;
CHAR  achBuff[80];

// Get the class name and the value count.
RegQueryInfoKey(hKey,        // key handle
    achClass,                // buffer for class name
    &cchClassName;,           // size of class string
    NULL,                    // reserved
    &cSubKeys;,               // number of subkeys
    &cbMaxSubKey;,            // longest subkey size
    &cchMaxClass;,            // longest class string
    &cValues;,                // number of values for this key
    &cchMaxValue;,            // longest value name
    &cbMaxValueData;,         // longest value data
    &cbSecurityDescriptor;,   // security descriptor
    &ftLastWriteTime;);       // last write time

SetDlgItemText(hDlg, IDE_CLASS, achClass);
SetDlgItemInt(hDlg, IDE_CVALUES, cValues, FALSE);

SendMessage(GetDlgItem(hDlg, IDL_LISTBOX),
    LB_ADDSTRING, 0, (LONG) "..");

// Enumerate the child keys, until RegEnumKeyEx fails. Then
// get the name of each child key and copy it into the list box.

SetCursor(LoadCursor(NULL, IDC_WAIT));
for (i = 0, retCode = ERROR_SUCCESS;
        retCode == ERROR_SUCCESS; i++)
{
    retCode = RegEnumKeyEx(hKey,
                 i,
                 achKey,
                 MAX_PATH,
                 NULL,
                 NULL,
                 NULL,
                 &ftLastWriteTime;);
    if (retCode == (DWORD)ERROR_SUCCESS)
    {
        SendMessage(GetDlgItem(hDlg, IDL_LISTBOX),
            LB_ADDSTRING, 0, (LONG) achKey);
    }
}
SetCursor(LoadCursor (NULL, IDC_ARROW));

// Enumerate the key values.
SetCursor(LoadCursor(NULL, IDC_WAIT));

if (cValues)
{
    for (j = 0, retValue = ERROR_SUCCESS;
            j < cValues; j++)
    {
        cchValue = MAX_VALUE_NAME;
        achValue[0] = '\0';
        retValue = RegEnumValue(hKey, j, achValue,
            &cchValue;,
            NULL,
            NULL,    // &dwType;,
            NULL,    // &bData;,
            NULL);   // &bcData;

        if (retValue == (DWORD) ERROR_SUCCESS )
        {
            achBuff[0] = '\0';

            // Add each value to a list box.
            if (!lstrlen(achValue))
                lstrcpy(achValue, "");
            wsprintf(achBuff, "%d) %s ", j, achValue);
            SendMessage(GetDlgItem(hDlg,IDL_LISTBOX2),
                LB_ADDSTRING, 0, (LONG) achBuff);
        }
    }

SetCursor(LoadCursor(NULL, IDC_ARROW));

}

支持原创技术分享,据说打赏我的人,都找到了女朋友!