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;
}

person Leo Noob Lin    schedule 13.05.2015    source источник


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

person Adrian McCarthy    schedule 13.05.2015
comment
Эй, похоже, я куда-то уезжаю! Теперь он создает ключ Test в правильном каталоге, но я хочу, чтобы он содержал TestText, но когда я запускаю программу, он записывает в ключ: 敔 瑳 敔 瑸 - person Leo Noob Lin; 14.05.2015
comment
(LPBYTE)TEXT("TestText") - это большой красный флаг - person M.M; 14.05.2015