注册表看似简单的问题,谁能读取这个键值。
在网上查找了一下,Windows最近运行过的程序记录存贮在“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU”键值里面,如从任务管理器中输入:“Regedit”或“cmd”。。。在这个键值下就会有名为“MRUList”、“a”、“b”。。。的值。
现在先用函数读取“MRUList”:
HKEY hKey = NULL;
TCHAR szRList[256] = { '\0 ' };
DWORD dwRet;
TCHAR szRunBuf[256] = { '\0 ' };
::RegOpenKeyEx(HKEY_CURRENT_USER,
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU\\"),
0, KEY_READ, &hKey);
::RegQueryValueEx(hKey, TEXT("MRUList"), NULL, NULL, (BYTE*)szRList, &dwRet); // 成功读取
::RegQueryValueEx(hKey, TEXT("b"), NULL, NULL, (BYTE*)szRunBuf, &dwRet); // 读取失败,为什么会失败!!!!
::RegCloseKey(hKey);
哪为高手能解释一下呢?读其他键值并不存在这种情况。
[解决办法]
读取之前要正确设置dwRet这个参数大小。
[解决办法]
你的代码太多漏洞了,你试一下把这句 DWORD dwRet; 初始化一下,改为 DWORD dwRet = 0; 你看看原来读取成功的现在还可以成功不?
"读取之前要正确设置dwRet这个参数大小" 这个回答绝对正确。
“有更多数据可用”证明你的dwRet长度分配不够。