registrykey — C ++ Почему мой код помещает ключ реестра в неправильный каталог?

Итак, я хочу поместить раздел реестра в каталог 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;
}

1

Решение

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 с длинными строками.

5

Другие решения


По вопросам рекламы [email protected]