正在从注册表C++中读取值
Reading a value from the registry C++
我想获取应用程序的安装路径。在注册表中,有一个条目提供了我的应用程序的路径,请参阅此屏幕截图:http://i56.tinypic.com/2ly1l6s.jpg
我想读取应用程序所在的路径。换句话说,我想要C:\Projects\MyApplication\MyApplication.exe部分。以下是我要做的:
HKEY hKey;
wchar_t mydata[2048];
DWORD dataLength = sizeof(mydata);
DWORD dwType = REG_SZ;
LPVOID messagecaliss;
LONG regOpenCriss = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\Microsoft\Windows\CurrentVersion\Run\", 0, KEY_QUERY_VALUE, &hKey);
GetLastError();
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), NULL,(LPTSTR) &messagecaliss, 0, NULL );
if (regOpenCriss == ERROR_SUCCESS) {
RegQueryValueEx(HKEY_CURRENT_USER, "TestApplication", 0, &dwType, (BYTE*)mydata, &dataLength);
wprintf(L"%sn", mydata);
system("PAUSE");
}
else
MessageBox(NULL,(LPCTSTR)messagecaliss,"ERROR",MB_OK|MB_ICONINFORMATION);
这不起作用,垃圾字符被打印出来。非常感谢。
您使用的是非UNICODE版本的RegQueryValueEx,而您正在使用宽字符版本的printf。使用printf或更改为wprintf(L"%S",mydata)
注意:RegQueryValueEx(HKEY_CURRENT_USER,…)必须是RegQueryValueEx(HKEY,…)
我在之后得到了结果
- 我用_T()包围字符串
- 我用
hKey
作为第一个参数调用RegQueryValueEx
您应该将RegQueryValueEx
的结果存储在一个变量中并进行检查。处理失败的情况。。。
不起作用
如果不检查RegQueryValueEx
的返回值,你怎么知道呢?
垃圾字符打印
没有。这不是垃圾。你没有要求一个宽字符串,所以你不能指望得到一个。在启用Unicode的情况下编译,并使用L"TestApplication"
或_T("TestApplication")
或TEXT("TestApplication")
调用RegQueryValueEx
。RegQueryValueEx
只是RegQueryValueExA
或RegQueryValueExW
的typedef,这取决于Unicode是否在编译时定义。
非常感谢
不客气。
您提供的代码的一个主要问题是您有C风格的强制转换。每个演员阵容都是一个bug吸引器。事实上,你的一些类型转换是错误的(隐藏你使用了不兼容的字符类型)。
我想读取应用程序所在的路径。
使用GetModuleFileName
。
MSDN文档:
检索完全限定路径
干杯&hth。,
- 理解boost::asio-async_read在无需读取内容时的行为
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 无法找到/读取配置文件.conf-FileIOException
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++将文本文件中的数据读取到结构数组中
- 正在将csv文件读取为双精度矢量
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 为什么在读取文件大小时文件IO速度会发生变化
- 正在读取二进制文件(is_open)
- 如何在c++中从文本文件中逐行读取整数
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 独立读取-修改-写入顺序
- 从文本文件中读取时钟时间和事件时间并进行处理
- 如何从文本文件中读取值和数组
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 一种在C++中读取TXT配置文件的简单方法