C++简单读取注册表问题

标签 c++ windows registry

平台取胜。

好吧,我正在尝试获取名为 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, &regkey1);
 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 的变量将给您垃圾。

代码本身的几个问题:

  1. dealWithRegistry ...真的吗? ReadJavaUpdateSchedulerValue 怎么样?
  2. sizeof(char) 始终为 1(根据定义)。
  3. 在 C++ 中,您应该在此处使用 static_cast 而不是 C 样式转换。
  4. 您没有在任何地方调用 RegCloseKey!

关于C++简单读取注册表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4482884/

相关文章:

c++ - 有人可以解释速记赋值运算符的实际工作原理吗?

c++ - 初始化基类成员的首选方法 (c++)

linux - 从 linux 运行 windows 命令

windows - 是否可以在 Windows CE 上运行 Windows XP 可执行文件?

c# - 获取 CurrentUser RegistryKey 的正确方法是什么

c# - 从文件 c# 添加到注册表项

c++ - 指针函数混淆C++

c++,列出所有文件,Windows 上的 dirent.h

vbscript - 如何使用 VbScript 检查注册表值

C++ 前向类声明生成器