首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

遍历注册表中某一个key的所有值,牛人请进,该怎么解决

2012-01-19 
遍历注册表中某一个key的所有值,牛人请进为何这一句老是出错if(::RegOpenKeyEx(HKEY_CURRENT_USER,EDSETTI

遍历注册表中某一个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);

热点排行