繁体   English   中英

从注册表 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"%s\n", mydata);
system("PAUSE");
}
else
    MessageBox(NULL,(LPCTSTR)messagecaliss,"ERROR",MB_OK|MB_ICONINFORMATION);

这不起作用,会打印垃圾字符。 非常感谢。

您正在使用非 UNICODE 版本 o RegQueryValueEx,并且正在使用 printf 的宽字符版本来显示它。 使用 printf 或更改为 wprintf( L"%S",mydata )

注意:RegQueryValueEx(HKEY_CURRENT_USER,...) 必须是 RegQueryValueEx(hKey,...)

之后我得到了结果:

  1. 我用 _T() 包围字符串
  2. 我用hKey作为第一个参数调用RegQueryValueEx

您应该将RegQueryValueEx的结果存储在一个变量中并检查它。 处理失败案例...

这不起作用

如果不检查RegQueryValueEx的返回值,你怎么知道?

打印垃圾字符

不,这不是垃圾。 你没有要求一个宽字符串,所以你不能指望得到一个。 在启用 Unicode 的情况下编译并使用L"TestApplication"_T("TestApplication")TEXT("TestApplication")调用RegQueryValueEx RegQueryValueEx只是RegQueryValueExARegQueryValueExW的 typedef,具体取决于 Unicode 是否在编译时定义。

非常感谢

别客气。

您提供的代码的一个主要问题是您有 C 样式转换。 每个演员都是一个虫子吸引器。 事实上,你的一些演员是错误(隐藏你使用不兼容的字符类型)。

我想读取我的应用程序所在的路径。

使用GetModuleFileName

MSDN 文档
检索完全限定的路径

干杯&hth.,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM