1

我在 ac void 函数中有此代码来获取和打印 Windows 注册表项的子项

TCHAR    achKey[MAX_KEY_LENGTH];   // buffer for subkey name
retCode = 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 

    // Enumerate the subkeys, until RegEnumKeyEx fails.

    if (cSubKeys)
    {
        printf( "\nNumber of subkeys: %d\n", cSubKeys);

        for (i=0; i<cSubKeys; i++) 
        { 
            cbName = MAX_KEY_LENGTH;
            retCode = RegEnumKeyEx(hKey, i,
                     achKey, 
                     &cbName, 
                     NULL, 
                     NULL, 
                     NULL, 
                     &ftLastWriteTime); 
            if (retCode == ERROR_SUCCESS) 
            {
                _tprintf(TEXT("(%d) %s\n"), i+1, achKey);
            }
        }
    } 

我如何修改以返回包含所有子键值的数组谢谢


vector<string> subkeys嗨大卫感谢您的回复,我无法使用这些标头进行无错误编译

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <vector>
#include <string>
using namespace std;

如果我改为:

vector<TCHAR> getSubKeys(HKEY key)
{
    vector<TCHAR>> subkeys;
    ....
    for (i=0; i<cSubKeys; i++) 
    {
        // get subkey name
        subkeys.push_back(TCHAR>(achKey));
    }
    ....
    return subkeys;
}

通过此更改,它可以工作,但是在 t_main 函数中,当我尝试将向量列出到控制台时,仅显示八个(子键的数量是正确的)数字,例如 65000,八个向量元素的值相同,问题出在哪里或我该如何编译用你的代码,非常感谢

4

1 回答 1

1

鉴于您使用的是 C++,您不应该使用数组。取而代之vector<T>的是适当的数据结构。创建其中之一来保存您的注册表项字符串。

vector<string> subkeys;

您当前打印的位置achKey,而不是添加到subkeys

subkeys.push_back(string(achKey));

如果您正在为 Unicode 构建,请wstring改用。

您的函数可能如下所示:

vector<string> getSubKeys(HKEY key)
{
    vector<string> subkeys;
    ....
    for (i=0; i<cSubKeys; i++) 
    {
        // get subkey name
        subkeys.push_back(string(achKey));
    }
    ....
    return subkeys;
}
于 2012-04-21T13:24:55.010 回答