c++ RegSetValueEx 在注册表中只设置一个字符值

标签 c++ windows winapi registry

我正在对数据进行 (char *) 转换,但我在注册表中只获得了一个 char 值。如果 我不使用转换 msvc 2010 告诉我参数类型 LPCTSTR 与 const char * 不兼容。

谁能帮帮我?

HKEY hKey;
LPCTSTR sk = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");

LONG openRes = RegOpenKeyEx(HKEY_CURRENT_USER, sk, 0, KEY_ALL_ACCESS , &hKey);

if (openRes==ERROR_SUCCESS) {
    printf("Success opening key.");
} else {
    printf("Error opening key.");
}

LPCTSTR value = TEXT("SomeKey");
LPCTSTR data = L"TestData\0";

LONG setRes = RegSetValueEx (hKey, value, 0, REG_SZ, (LPBYTE)data, strlen(data)+1);

if (setRes == ERROR_SUCCESS) {
    printf("Success writing to Registry.");
} else {
    printf("Error writing to Registry.");
}
cout << setRes << endl;

LONG closeOut = RegCloseKey(hKey);
if (closeOut == ERROR_SUCCESS) {
    printf("Success closing key.");
} else {
    printf("Error closing key.");
}

最佳答案

strlen(data) 可能返回值 1,因为 strlen 需要一个 char* 并且 L"TestData\0" 很宽。使用 TEXT("TestData\0") 并调用 _tcslen(data)
请注意,RegSetValueEx 需要数据的大小,因此请使用 _tcslen(data) * sizeof(TCHAR)

关于c++ RegSetValueEx 在注册表中只设置一个字符值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4484962/

相关文章:

c++ - 在c++中绘制抗锯齿圆角矩形

windows - 调试 Windows 消息内容和目标的好方法是什么?

c++ - 在 MFC 应用程序中未调用重叠的 WSARecv() 回调

c++ - EmfToWmfBits api 总是返回 0

c++ - 为什么 Createfile() 没有二进制标志

c++ - 在拖动窗口或按住菜单按钮期间,如何阻止 Windows 阻止程序?

c++ - 尝试重载输出运算符时出错

c++ - 非变异操作本质上是线程安全的(C++)吗?

c - 错误 : identifier "_S_IFDIR" is undefined

windows - 在队列(例如 MSMQ)中发送电子邮件