如下图所示,注册表的HKEY_CURRENT_USER主键下Software\\AB子键中有名称为CD,类型为REG_SZ,值为“123”的字符串
一开始我是通过下面的程序来获取名称为CD的字符串的值
#include <stdio.h>
#include <windows.h>
#include <windef.h>
#include <winreg.h>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
HKEY hKey;
LPCTSTR lpSubKey = TEXT("Software\\AB");
char wText[100] = { 0 };
DWORD dwSize = sizeof(wText);
DWORD dwType = REG_SZ;
RegOpenKeyEx(HKEY_CURRENT_USER, lpSubKey, NULL, KEY_READ, &hKey);
RegQueryValueEx(hKey, TEXT("CD"), NULL, &dwType, (LPBYTE)&wText, &dwSize);
RegCloseKey(hKey);
printf("%s\n", wText);
getchar();
return 0;
}
本来预期程序会打印CD的值“123”,结果程序输出如下,只打印了最前面的一个字符出来
导致该问题的原因是wText得为WCHAR类型,不能为char类型。把程序更改为如下所示:
#include <stdio.h>
#include <windows.h>
#include <windef.h>
#include <winreg.h>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
HKEY hKey;
LPCTSTR lpSubKey = TEXT("Software\\AB");
TCHAR wText[100] = { 0 };
DWORD dwSize = sizeof(wText);
DWORD dwType = REG_SZ;
RegOpenKeyEx(HKEY_CURRENT_USER, lpSubKey, NULL, KEY_READ, &hKey);
RegQueryValueEx(hKey, TEXT("CD"), NULL, &dwType, (LPBYTE)&wText, &dwSize);
RegCloseKey(hKey);
printf("%ls\n", wText);
getchar();
return 0;
}
重新编译,运行,可以看到获取到注册表中正确的值了: