读书人

遍历注册表中某一个key的所有值牛人

发布时间: 2012-01-19 00:22:28 作者: rapoo

遍历注册表中某一个key的所有值,牛人请进
为何这一句老是出错 if (::RegOpenKeyEx(HKEY_CURRENT_USER, EDSETTING_KEY, 0, KEY_READ, &hKey) != ERROR_SUCCESS)??

hKey得到的值老是null


#include "windows.h "
#include <string>
#include <list>

#defineEDSETTING_KEYTEXT( "Software\\CRYPTIONTOOL ")
#defineEDSETTING_KEY_LEN256
#define IS_DISPLAYTEXT( "DisplayName ")
std::list < std::basic_string <TCHAR> > m_lsRegDirs;

void BuildList(void)
{
HKEY hKey;
if (::RegOpenKeyEx(HKEY_CURRENT_USER, EDSETTING_KEY, 0, KEY_READ, &hKey) != ERROR_SUCCESS)
return;

DWORD dwIndex = 0;
LONG lRet;
DWORD cbName = EDSETTING_KEY_LEN;
TCHAR szSubKeyName[EDSETTING_KEY_LEN];

while ((lRet = ::RegEnumKeyEx(hKey, dwIndex, szSubKeyName, &cbName, NULL,
NULL, NULL, NULL)) != ERROR_NO_MORE_ITEMS)
{
MessageBox(NULL, (char *)lRet, TEXT( "BOOK "), NULL);

// Do we have a key to open?
if (lRet == ERROR_SUCCESS)
{
// Open the key and get the value
HKEY hItem;
if (::RegOpenKeyEx(hKey, szSubKeyName, 0, KEY_READ, &hItem) != ERROR_SUCCESS)
continue;
// Opened - look for "DisplayName "
TCHAR szDisplayName[EDSETTING_KEY_LEN];
DWORD dwSize = sizeof(szDisplayName);
DWORD dwType;

if (::RegQueryValueEx(hItem, IS_DISPLAY, NULL, &dwType,
(LPBYTE)&szDisplayName, &dwSize) == ERROR_SUCCESS)
{
// Add to the list
m_lsRegDirs.push_back(szDisplayName);

}
::RegCloseKey(hItem);
}
dwIndex++;
cbName = EDSETTING_KEY_LEN;
}
::RegCloseKey(hKey);
}

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
BuildList();
return 0;
}

[解决办法]
HKEY hKey;
DWORD dwNumValues, index, dwInitValueNameLen;
TCHAR szFile[MAX_PATH];

// open the registry key
RegOpenKeyEx(HKEY_CURRENT_USER, EDSETTING_KEY, 0,
KEY_QUERY_VALUE, &hKey);

// get info about what 's in the key
RegQueryInfoKey (hKey, NULL, NULL, NULL, NULL, NULL,
NULL, &dwNumValues, NULL, NULL, NULL, NULL);

// get the info in the registry key
for (index = 0; index < dwNumValues; index++) {
dwInitValueNameLen = MAX_PATH;
RegEnumValue(hKey, index, szFile, &dwInitValueNameLen, NULL, NULL, NULL, NULL);
m_lsRegDirs.push_back(szFile);
MessageBox(NULL, strlen(szFile), "build ", NULL);
}

// clean up
RegCloseKey(hKey);

读书人网 >VC/MFC

热点推荐