[英]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,...)
之后我得到了结果:
hKey
作为第一个参数调用RegQueryValueEx
您应该将RegQueryValueEx
的结果存储在一个变量中并检查它。 处理失败案例...
这不起作用
如果不检查RegQueryValueEx
的返回值,你怎么知道?
打印垃圾字符
不,这不是垃圾。 你没有要求一个宽字符串,所以你不能指望得到一个。 在启用 Unicode 的情况下编译并使用L"TestApplication"
或_T("TestApplication")
或TEXT("TestApplication")
调用RegQueryValueEx
。 RegQueryValueEx
只是RegQueryValueExA
或RegQueryValueExW
的 typedef,具体取决于 Unicode 是否在编译时定义。
非常感谢
别客气。
您提供的代码的一个主要问题是您有 C 样式转换。 每个演员都是一个虫子吸引器。 事实上,你的一些演员是错误(隐藏你使用不兼容的字符类型)。
我想读取我的应用程序所在的路径。
使用GetModuleFileName
。
MSDN 文档:
检索完全限定的路径
干杯&hth.,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.