Итак, я хочу поместить раздел реестра в каталог HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Run, и я хочу, чтобы он назывался Test и содержал «TestText», но вместо этого этот код помещает новый ключ в HKCU \ Test и программа записывает случайные китайские символы в раздел реестра. Кто-нибудь поможет?
#include "stdafx.h"#include <iostream>
#include <Windows.h>
#include <string>
#include <time.h>
using namespace std;
int main()
{
HKEY keyExample;
if (RegOpenKey(HKEY_CURRENT_USER, TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\"), &keyExample) != ERROR_SUCCESS)
{
RegCloseKey(keyExample);
return 69;
}
if (RegSetKeyValue(HKEY_CURRENT_USER, TEXT("Test"), 0, REG_SZ, (LPBYTE)"TestText", strlen("TestText")*sizeof(char)) != ERROR_SUCCESS)
{
RegCloseKey(keyExample);
cout << "Unable to set registry value value_name";
}
RegCloseKey(keyExample);
return 0;
}
RegSetKeyValue(HKEY_CURRENT_USER, ...
Это ошибка. Вам нужно использовать keyExample
вы получили, когда вы открыли ключ, который вы хотели. Как это:
RegSetKeyValue(keyExample, ...
И для вашей проблемы ANSI / Unicode вам нужно использовать TEXT()
макрос для ваших реальных данных, а не только для его имени:
RegSetKeyValue(keyExample, TEXT("Test"), 0, REG_SZ, TEXT("TestText"), lstrlen(TEXT("TestText"))*sizeof(TCHAR))
Как правило, легче забыть все устаревшие обратно совместимые вещи, связанные с меню TEXT / TCHAR, и напрямую вызывать W-версии функций Windows API с длинными строками.