2012-04-21 61 views
1

我在AC void函數的代碼在Windows註冊表項來獲取和打印子項的Windows註冊表鍵子鍵返回數組C++

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的八個向量元素的值相同,問題出在哪裏,或者我怎樣才能用你的代碼編譯, 非常感謝

+2

[你嘗試過什麼(http://www.whathaveyoutried.com)? – Jon 2012-04-21 12:46:24

+0

沒有什麼,我開始與win32 – 2012-04-21 13:04:08

回答

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; 
}