平台取胜。
好吧,我正在尝试获取名为 SunJavaUpdateSched 的键的值,但我正在获取 一个错误。我遇到第二个错误,不知何故我可以打开 key 但无法获取值。所以这是到目前为止的代码:
void dealWithRegistry()
{
HKEY regkey1;
char data[100];
DWORD datasize = sizeof (data) / sizeof (char);
LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_READ, ®key1);
if (rc != ERROR_SUCCESS)
{
cout << "there was a problem openning" << endl;
}
else
{
rc = RegGetValue (regkey1, NULL, L"SunJavaUpdateSched", RRF_RT_REG_SZ, NULL, (void*) data, &datasize);
if (rc != ERROR_SUCCESS)
{
cout << "there was a problem getting the value" << endl;
}
}
printf("%s\n", data);
}
最佳答案
打印出实际的错误值。您可以查看系统错误代码,它会准确告诉您问题所在。
请注意 RegGetValue
将返回一个宽字符串,而不是一个字符串,这意味着您使用 char
的变量将给您垃圾。
代码本身的几个问题:
dealWithRegistry
...真的吗?ReadJavaUpdateSchedulerValue
怎么样?sizeof(char)
始终为 1(根据定义)。- 在 C++ 中,您应该在此处使用
static_cast
而不是 C 样式转换。 - 您没有在任何地方调用
RegCloseKey
!
关于C++简单读取注册表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4482884/