从注册表项读取字符串值
Reading string value from registry key
我的简化代码:
HKEY hKey;
if(someCondition)
lRes = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", 0, KEY_READ, &hKey);
else
lRes = RegOpenKeyExW(HKEY_LOCAL_MACHINE, "SOFTWARW\Wow6432Node\Microsoft\Windows\CurrentVersion\Run", 0, KEY_READ, &hKey);
if(lRes == ERROR_SUCCESS)
{
std::wstring strKeyValue;
lRes = GetStringRegKey(hKey, L"valueName", strKeyValue, L"bad");
if(lRes == ERROR_SUCCESS)
{
//doSomething
}
}
两个RegOpenKeyExW()
都返回ERROR_SUCCESS
,但在一种情况下(从Wow6432Node
读取),GetStringRegKey()
返回ERROR_SUCCESS
并初始化strKeyValue
,在另一种情况下返回ERROR_FILE_NOT_FOUND
。所有路径和值名称都是正确的。手工将表项添加到注册表。
有什么问题吗?是否有任何凭据问题?谢谢!
注意:最初的问题是使用HKEY_CLASSES_ROOT和HKEY_LOCAL_MACHINE之间的区别是什么,以及为什么使用一个可以工作而另一个不行。这是那个问题的答案。
摘自Microsoft来源:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724475(v=vs.85).aspx
HKEY_CLASSES_ROOT (HKCR)密钥包含文件扩展名关联和COM类注册信息,如progid,clsid和iid。它主要用于与
类注册和文件扩展名信息存储在HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER键。的HKEY_LOCAL_MACHINESoftwareClasses键包含默认设置可以应用于本地计算机上的所有用户。的HKEY_CURRENT_USERSoftwareClasses键包含适用的设置只对交互用户。HKEY_CLASSES_ROOT键提供了一个合并这两个信息的注册中心的视图来源。HKEY_CLASSES_ROOT也为为以前版本的Windows设计的应用程序。
所以不同之处在于:HKEY_CLASSES_ROOT
将为以前版本的Windows提供一个统一的注册表视图,并将默认用户设置与当前用户设置合并。它主要用于读取交互式用户的设置。它不应该用于存储值,只用于读取,可以在提供的链接中找到,它实际上映射到' HKEY_CURRENT_USER' hive。
HKEY_CURRENT_USER
是"真正的"注册表路径,因此出于安全原因,需要写访问的所有与注册表的交互都应该通过它。采用哪个分支取决于您是只更新注册表中的用户设置,还是更新注册表中的所有用户设置。
- 如何使用Luacneneneba API正确读取字符串和表参数
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 如何从字符串C++读取多个整数
- 使用字符串读取的字符串
- 从文件到字符串读取并传递到功能
- C++ cin 将字符串读取到 int 类型中返回 0
- 使用CIN和/或字符串读取带有混合输入的文本文件
- 将两个字符串作为一个字符串读取
- 如何将WCP 1252字符串读取为std::tstring
- 如何将字符串读取为字符串向量或将整数读取为整数向量
- 将一系列字符串读取到char数组中
- 如何在 c++ 中将文件中的段落作为单个字符串读取
- 从 txt 文件中将后缀表达式作为字符串读取
- C++银行项目;如何将一组字符串读取为单独的浮点数并添加它们
- 在 c++ 中循环字符串读取器
- 将字符串读取为命令行参数C++
- 如何在QT中使用QDomDocument对象将字符串读取为XML
- 使用Matio库将.mat文件中的字符串读取到C++中
- 作为字符串读取第一列数据文件
- 如何在字符串读取完成时停止c++的recv() ?